【发布时间】:2019-07-16 00:19:21
【问题描述】:
我使用 Webpack 编写了一个 javascript 库。入口点someClass.js 如下所示:
import x from './x'
/* several more imports here */
class SomeClass {}
export default SomeClass;
我捆绑这个库的 webpack 配置如下:
module.exports = {
entry: './someClass.js',
output: {
path: __dirname,
filename: 'lib.js',
library: 'lib',
libraryTarget: 'umd',
},
然后我将生成的lib.js 导入一个简单的index.html,其定义如下:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script src="app.js" type="module"></script>
</body>
</html>
在app.js,我简单尝试导入文件如下:
import * as lib from './lib.js';
console.log(lib);
// Output: Module {Symbol(Symbol.toStringTag): "Module"} Symbol(Symbol.toStringTag): "Module"
但是,这个 import 语句似乎没有按计划工作(我希望一个带有 default 字段的模块是我的 SomeClass 构造函数)。
我可以访问我的库的默认导出SomeClass 的唯一方法是,如果我在app.js 中执行如下全局导入语句,它将lib 设置为window 上的对象:
import './lib.js';
console.log(window.lib);
// Output: Module {default: ƒ, __esModule: true, Symbol(Symbol.toStringTag): "Module"} default: class SomeClass_SomeClass
我不希望我的课程在全球 window 上可用,因为它使我的代码难以模块化。
我还希望能够在网络上的各种地方使用这个库(react 应用程序、独立的 html 文件等),因此希望最大限度地减少依赖关系。
有什么办法可以将模块导入为 es6 导入?
【问题讨论】:
标签: javascript node.js webpack ecmascript-6 module