Javascript 是否在ES6中导出多个变量?

Javascript 是否在ES6中导出多个变量?,javascript,ecmascript-6,vue.js,Javascript,Ecmascript 6,Vue.js,我试图在ES6中导出多个变量: exports.js var TestObject = Parse.Object.extend('TestObject') var Post = Parse.Object.extend('Post') export default TestObject export Post main.js: import TestObject from '../store' import Post from '../store' var testObject = new

我试图在ES6中导出多个变量:

exports.js

var TestObject = Parse.Object.extend('TestObject')
var Post = Parse.Object.extend('Post')

export default TestObject
export Post
main.js:

import TestObject from '../store'
import Post from '../store'

var testObject = new TestObject() // use Post in the same way
testObject.save(json).then(object => {
  console.log('yay! it worked', object)
})
我知道只有一个默认值,所以我只在第一项中使用了
default

但是,我收到以下错误消息:

Module build failed: SyntaxError: /home/alex/node/my-project/src/store/index.js: Unexpected token (9:7)
   7 | 
   8 | export default TestObject
>  9 | export Post

也许我做得不对?

在ES6中可以像这样导出多个对象

var TestObject = Parse.Object.extend('TestObject')
var Post = Parse.Object.extend('Post')

export {
    TestObject,
    Post
}
然后,在导入时,您可以这样做:

import { TestObject, Post } from './your-file';

您可以在此处阅读所有关于和的内容。

这是无效的语法。你能行

export { Post }
甚至只是

export var Post = Parse.Object.extend('Post')
或者将整个文件缩短为

export default Parse.Object.extend('TestObject')
export var Post = Parse.Object.extend('Post')
您的导入也不正确,您需要这样做

import TestObject, { Post } from '../store'
如果您真的想要一个单独的默认导出和一个单独的命名导出,那么就需要这样做。您也可以只进行两个命名导出,如果需要,也可以不使用默认值,例如

export var TestObject = Parse.Object.extend('TestObject');
export var Post = Parse.Object.extend('Post');

进口

import { TestObject, Post } from '../store'

如果它适合您的用例,您可以将非默认导出设置为默认导出的属性。我发现它有助于编写更清晰的代码

const TestObject = Parse.Object.extend('TestObject');
TestObject.Post = Parse.Object.extend('Post');

export default TestObject;
然后,导入时只需导入默认值:

import TestObject from './your-file.js';
然后,您可以这样使用它:

TestObject.Post({some, args});
导出默认值 导出{}

导入时,导出的名称必须相同


您也可以在导入时使用*。

为了导出多个变量,我们必须像这样从{}内的文件中获取想要导出的所有内容-

export { <var 1>, <var 2> , <var 3>, ... , <var n>};
main.js

export { Post };
import { Post } from '<exports file>';
从“”导入{Post};

这只是一个猜测,但您是否尝试过在第一行
export
末尾添加分号?@Pointy我尝试过。同样的错误。刚才的编辑使我的答案无效。在ES6中,导出时不给它一个密钥名是有效的。哦,我明白了。所以不再需要
default
关键字了?@mariotake是的,我什么都没有,不知道为什么接受了编辑。更正@alexchenco,你改为对导入的文件进行解构。我很好奇,
export default
export var
有什么区别?默认导出是从“/module”导入foo时得到的导出,如果使用
export var SomeThing
则需要按名称导入,例如从“/module”导入{SomeThing}默认值将成为您导入的项目,而无需对导入的对象进行结构化处理。因此,唯一的区别是使用
导出默认值的对象没有花括号,而使用“export var”的对象需要花括号?两者在导入时都被命名为某物:
foo
something
@alexchenco-Yup,主要区别是
foo
可以被命名为任何东西,并且总是会得到默认值,但是
TestObject
需要匹配导出的名称。如果您想在导入它的模块中为它指定一个不同的名称,您必须从
执行
导入{TestObject as SomeOtherName}
import foo from
import{default as foo}from
export { Post };
import { Post } from '<exports file>';