如何将 webpack 指向特定的 node_modules 文件夹
How to point webpack to a specific node_modules folder
我正在尝试构建一个 grpc
网络客户端,我需要打包代码来解析 require
语句。
我已将 protos
编译为 js
,如果我将它们放在我安装 node modules
.
的当前文件夹中,它就可以工作
问题是如果我在其他地方有 compiled proto
并且我从那里需要它们,webpack
会在那个路径中寻找 node modules
。
来自我的 client.js
工作版本:
const {StopRequest, StopReply} = require('./work_pb.js');
有问题的版本:
const {StopRequest, StopReply} = require('../../../messages/proto/output/work_pb.js');
在最后一个例子中,它在 ../../../messages/proto/output/
中查找 node modules
。
node modules
安装在我的 client.js
所在的当前路径以及我 运行 npx webpack client.js
.
的位置
ERROR in /home/xxx/yyy/zzz/messages/proto/output/work_pb.js
Module not found: Error: Can't resolve 'google-protobuf' in '/home/xxx/yyy/zzz/messages/proto/output'
@ /home/xxx/yyy/zzz/messages/proto/output/work_pb.js 11:11-37
@ ./client.js
如何告诉 webpack
在当前路径中查找节点模块而不是在已编译原型的路径中?
可以指定resolve.modules
自定义目录,Webpack在该目录下搜索绝对导入路径的模块:
// inside webpack.config.js
const path = require('path');
module.exports = {
//...
resolve: {
modules: [path.resolve(__dirname, 'node_modules'), 'node_modules']
}
};
这将使项目根目录(webpack 配置所在的位置)内的 node_modules
优先于默认设置 "node_modules"
,后者通过 node module resolution 算法解析路径。
我正在尝试构建一个 grpc
网络客户端,我需要打包代码来解析 require
语句。
我已将 protos
编译为 js
,如果我将它们放在我安装 node modules
.
问题是如果我在其他地方有 compiled proto
并且我从那里需要它们,webpack
会在那个路径中寻找 node modules
。
来自我的 client.js
工作版本:
const {StopRequest, StopReply} = require('./work_pb.js');
有问题的版本:
const {StopRequest, StopReply} = require('../../../messages/proto/output/work_pb.js');
在最后一个例子中,它在 ../../../messages/proto/output/
中查找 node modules
。
node modules
安装在我的 client.js
所在的当前路径以及我 运行 npx webpack client.js
.
ERROR in /home/xxx/yyy/zzz/messages/proto/output/work_pb.js
Module not found: Error: Can't resolve 'google-protobuf' in '/home/xxx/yyy/zzz/messages/proto/output'
@ /home/xxx/yyy/zzz/messages/proto/output/work_pb.js 11:11-37
@ ./client.js
如何告诉 webpack
在当前路径中查找节点模块而不是在已编译原型的路径中?
可以指定resolve.modules
自定义目录,Webpack在该目录下搜索绝对导入路径的模块:
// inside webpack.config.js
const path = require('path');
module.exports = {
//...
resolve: {
modules: [path.resolve(__dirname, 'node_modules'), 'node_modules']
}
};
这将使项目根目录(webpack 配置所在的位置)内的 node_modules
优先于默认设置 "node_modules"
,后者通过 node module resolution 算法解析路径。