如何修复可选传递依赖的 webpack "Module not found" 错误?
How to fix webpack "Module not found" error for optional transitive dependency?
我遇到了以下问题,我正在使用的软件库之一对 'web-worker' 有可选的依赖性。如果 web-worker 包可用,它将使用它,如果找不到 web-worker 包,它将使用不使用 web-worker 包的替代代码路径。
我 运行 遇到的问题是,当尝试创建 angular 构建时,它会给出以下错误。
Module not found: Error: Can't resolve 'web-worker' in 'C:\Gitdata\project\dev\angular\node_modules\elkjs\lib'
如果我检查这个包中的 main.js 文件,几乎它做的第一件事就是检查 web-worker 是否可用,如果不可用,它不会尝试加载 web-worker。
var workerThreadsExist = false;
try {
require.resolve('web-worker');
workerThreadsExist = true;
} catch (e) {}
// user requested a worker
if (options.workerUrl) {
if (workerThreadsExist) {
var Worker = require('web-worker');
optionsClone.workerFactory = function (url) {
return new Worker(url);
};
} else {
console.warn('Web worker requested but \'web-worker\' package not installed. \nConsider installing the package or pass your own \'workerFactory\' to ELK\'s constructor.\n... Falling back to non-web worker version.');
}
}
因此,即使代码流在不可用时永远不会要求 ('web-worker'),但出于某种原因,我在尝试构建我的应用程序时仍然遇到错误。
如果我改变
if (options.workerUrl)
进入
if (false)
它仍然给我模块未找到错误,摆脱错误的唯一方法是安装包或删除
var Worker = require('web-worker');
行。
如何告诉 angular 或 webpack 忽略这 1 个丢失的包?
你可以告诉 webpack 忽略 web-worker
模块 elkjs
试图 require
与 webpack.IgnorePlugin
.
在你的 webpack.config.js
里面:
{
plugins: [
new webpack.IgnorePlugin({
resourceRegExp: /web-worker/,
contextRegExp: /elkjs\/lib$/,
})
]
}
这应该告诉 webpack 在以 elkjs/lib
.
结尾的目录路径中忽略 web-worker
的任何 require 语句
我遇到了以下问题,我正在使用的软件库之一对 'web-worker' 有可选的依赖性。如果 web-worker 包可用,它将使用它,如果找不到 web-worker 包,它将使用不使用 web-worker 包的替代代码路径。
我 运行 遇到的问题是,当尝试创建 angular 构建时,它会给出以下错误。
Module not found: Error: Can't resolve 'web-worker' in 'C:\Gitdata\project\dev\angular\node_modules\elkjs\lib'
如果我检查这个包中的 main.js 文件,几乎它做的第一件事就是检查 web-worker 是否可用,如果不可用,它不会尝试加载 web-worker。
var workerThreadsExist = false;
try {
require.resolve('web-worker');
workerThreadsExist = true;
} catch (e) {}
// user requested a worker
if (options.workerUrl) {
if (workerThreadsExist) {
var Worker = require('web-worker');
optionsClone.workerFactory = function (url) {
return new Worker(url);
};
} else {
console.warn('Web worker requested but \'web-worker\' package not installed. \nConsider installing the package or pass your own \'workerFactory\' to ELK\'s constructor.\n... Falling back to non-web worker version.');
}
}
因此,即使代码流在不可用时永远不会要求 ('web-worker'),但出于某种原因,我在尝试构建我的应用程序时仍然遇到错误。
如果我改变
if (options.workerUrl)
进入
if (false)
它仍然给我模块未找到错误,摆脱错误的唯一方法是安装包或删除
var Worker = require('web-worker');
行。
如何告诉 angular 或 webpack 忽略这 1 个丢失的包?
你可以告诉 webpack 忽略 web-worker
模块 elkjs
试图 require
与 webpack.IgnorePlugin
.
在你的 webpack.config.js
里面:
{
plugins: [
new webpack.IgnorePlugin({
resourceRegExp: /web-worker/,
contextRegExp: /elkjs\/lib$/,
})
]
}
这应该告诉 webpack 在以 elkjs/lib
.
web-worker
的任何 require 语句