Yon*_*uan 6 javascript webpack
我有一个webpack.config.js这样的:
/* Something here */\n\nmodule.exports = {\n entry: {\n main: './src/index.js'\n },\n output: {\n library: 'MyClass',\n libraryTarget: 'umd',\n path: path.resolve(__dirname, 'lib'),\n filename: `package.js`\n },\n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n我的./src/index.js看起来像这样:
import MyClass from 'src/myClass'\nimport 'src/myStyle.css'\n\nexport default MyClass\nRun Code Online (Sandbox Code Playgroud)\n虽然这工作正常,但它将MyClass类暴露给window对象:
console.log(window.MyClass)\n=> Module {default: \xc6\x92, __esModule: true, Symbol(Symbol.toStringTag): "Module"}\nRun Code Online (Sandbox Code Playgroud)\n这样,我就无法使用以下方式调用我的类:
\nnew MyClass();\n=> TypeError: MyClass is not a constructor\nRun Code Online (Sandbox Code Playgroud)\n我必须像这样调用它:
\nnew MyClass.default();\n=> MyClass { ... }\nRun Code Online (Sandbox Code Playgroud)\n我可以通过在我的中执行类似的操作来解决问题./src/index.js:
const MyClass = require('src/myClass')\nmodule.exports = MyClass\n\n/* in browser */\nnew MyClass()\n=> Good, works fine\nRun Code Online (Sandbox Code Playgroud)\n但是,这样,我就无法使用import我的样式表:
const MyClass = require('src/myClass')\nimport 'src/myStyle.css'\n\nmodule.exports = MyClass\n=> TypeError: Cannot assign to read only property 'exports' of object '#<Object>'\nRun Code Online (Sandbox Code Playgroud)\n编辑
\n下面的方法也解决了这个问题,但是没有export:
/* webpack.config.js */\nmodule.exports = {\n entry: {\n main: './src/index.js'\n },\n output: {\n /* Need to remove library related props */\n // library: 'MyClass',\n // libraryTarget: 'window',\n path: path.resolve(__dirname, 'lib'),\n filename: `package.js`\n },\n ...\n}\n\n/* ./src/index.js */\nimport MyClass from 'src/myClass'\nimport 'src/myStyle.css'\n\nwindow.MyClass = MyClass\nRun Code Online (Sandbox Code Playgroud)\nWebpack 中有没有一种方法可以让我将export模块直接全局化,而不必同时调用.default 入口文件import中的样式表?
在output.libraryExport你的webpack.config.js. (参考)
与output.libraryTargetset to一起umd,output.libraryExport告诉 Webpack 将哪个属性导出为output.library.
在您的情况下,除了原始配置之外,设置output.libraryExport为default相当于在编译后的代码后附加以下代码片段。
window.MyClass /*output.library*/ = module.exports.default /*output.libraryExport*/
Run Code Online (Sandbox Code Playgroud)
配置如下。
/* Something here */
module.exports = {
entry: {
main: './src/index.js'
},
output: {
library: 'MyClass',
libraryTarget: 'umd',
libraryExport: 'default', // export the default as window.MyClass
path: path.resolve(__dirname, 'lib'),
filename: `package.js`
}
}
Run Code Online (Sandbox Code Playgroud)
在控制台中尝试一下。
> window.MyClass
class {...}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |