如果我有一个库,比如utils.js,如下所示
exports.foo = function () {
return 'foo';
};
exports.bar = function () {
return 'bar';
};如下所示:
import {foo} from './libs/utils';
console.log(foo());不是很壮观,但我觉得这个问题是这文章中描述的问题的根源。无论如何,我不能让它与SystemJS一起工作。我必须修改代码才能修复它
import utils from './libs/utils';
console.log(utils.foo());下面是我的systemjs文件:
SystemJS.config({
map: {
'plugin-babel': 'node_modules/systemjs-plugin-babel/plugin-babel.js',
'systemjs-babel-build': 'node_modules/systemjs-plugin-babel/systemjs-babel-browser.js',
},
packages: {
'.': {
defaultJSExtensions: 'js'
}
},
transpiler: 'plugin-babel'
});因此,似乎只能加载exports对象,而不能加载命名的导出。这件事能解决吗?
更新I给人的印象是它可以用格式修复
meta: {
'./libs/utils.js': {
format: 'cjs'
}
}但到目前为止,它也给出了同样的问题
发布于 2017-11-04 06:59:03
此行为不是SystemJS特有的。自0.20版本以来,SystemJS的行为就像这样,因为这是ES6模块互操作性标准化的标准。
当您正在使用CommonJS import导入module.exports模块(通过ES6 import导出)时,您将只获得整个导出,并且无法立即对导出的名称进行重构。
但是,当您是通过import export导出的ES6 ing模块时,您将能够对导出的名称进行重构。
所以,这都是故意的。盖伊·贝德福德( Guy )在他的博客上写道,他提到了NodeJS正在进行的模块标准化:
..。当从ES模块导入CommonJS模块时,将不再允许命名导出,并将在https://github.com/nodejs/CTC/pull/60/files#diff-2b572743d67d8a47685ae4bcb9bec651R217中讨论。 也就是说,
import { name } from 'cjs.js',其中cjs.js是一个CommonJS模块将不再受支持,而是需要import cjs from 'cjs.js'; cjs.name。
使用__esModule的互操作解决方案
不过,我们将继续支持互操作中的
__esModule标志,允许在这些情况下取消指定的导出。 因此,如果编写了cjs.js模块: exports.__esModule = true;exports.name =函数() {.} 这样就有可能拥有import { name } from 'cjs.js';,尽管cjs.js是一个CommonJS模块,尽管这个__esModule最终也会被废弃。
https://stackoverflow.com/questions/42412965
复制相似问题