我的意思是node.js的对象是全局函数方法.在浏览器中像这样:
function myGlobalFunction() {
console.log(this === window);
}
myGlobalFunction();
=> true
Run Code Online (Sandbox Code Playgroud) 我的浏览器应用程序的 Web 和 Web Worker 部分之间共享了大量代码。
我怎样才能告诉 webpack 将我的代码分成公共块,以便保证结果 100% 工作?
在我告诉 webpack 生成公共块(它确实做了)之后,webworker 代码中断(在运行时失败)。即使在我修复了微不足道的“窗口未定义”错误之后,工作人员也什么都不做。
我相信这与 webpack 的“目标”选项有关,默认情况下该选项设置为“web”。但我需要“网络”目标,因为我没有纯粹的网络工作者代码。
我也不能做多个 webpack 配置,因为我不能用多个配置做常见的块...
我该怎么办?
如果有人感兴趣:我正在尝试为我的应用程序构建一个最小尺寸的构建,其中包括 monaco 编辑器(提供工作人员):
https://github.com/Microsoft/monaco-editor/blob/master/docs/integrate-esm.md
您可以在这里(在页面底部)看到入口点由 1 个主入口文件 + 工人组成。
由于我使用的重复代码,目前至少浪费了 6 MB,并且由于这个问题目前无法拆分。那是很多浪费的流量。
有任何想法吗?:)
我的 webpack 4.1.1 配置基本上是:
module.exports = (env, options) => {
const mode = options.mode;
const isProduction = mode === 'production';
const outDir = isProduction ? 'build/release' : 'build/debug';
return {
entry: {
"app": "./src/main.tsx",
"editor.worker": 'monaco-editor/esm/vs/editor/editor.worker.js',
"ts.worker": 'monaco-editor/esm/vs/language/typescript/ts.worker.js'
},
output: {
filename: "[name].bundle.js",
path: `${__dirname}/${outDir}`, …Run Code Online (Sandbox Code Playgroud) 我在这里需要帮助。我捆绑了一个自定义库(以示例LibraryJS命名,它使用lodash作为依赖项。
在webpack配置中,我将lodash设置为外部依赖项,如下所示:
{
externals: {
"lodash"
}
}
Run Code Online (Sandbox Code Playgroud)
效果很好。但是,当我想在另一个项目中使用该库时,出现以下错误:“ libraryjs.js:77 Uncaught ReferenceError:未定义lodash ”
这是以下行:
/***/ }),
/* 1 */
/***/ (function(module, exports) {
=> module.exports = lodash;
/***/ }),
Run Code Online (Sandbox Code Playgroud)
事实是,我在项目中也使用lodash,因此它应该可以正常工作。我究竟做错了什么?
顺便说一句,我正在使用gulp + browserify捆绑我的项目,并使用gulp + gulp-webpack捆绑了图书馆。
编辑:我找到了一种修复错误的方法,但我真的不想坚持使用此修复程序,因为它的确是...丑陋的。
const lodash = require('lodash')
window.lodash = lodash; // <= The fix, ugh
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!