如何将 webpack 指向特定的 node_modules 文件夹

hdo*_*adu 6 protocol-buffers web webpack grpc

我正在尝试构建一个grpcWeb 客户端,我需要打包代码来解析require语句。

我已经编译了protostojs 并且如果我将它们放在我安装node modules.

问题是如果我compiled proto在其他地方有 并且我从那里需要它们,在该路径中webpack寻找node modules

从我的 client.js

工作版本:

const {StopRequest, StopReply} = require('./work_pb.js');
Run Code Online (Sandbox Code Playgroud)

有问题的版本:

const {StopRequest, StopReply} = require('../../../messages/proto/output/work_pb.js');
Run Code Online (Sandbox Code Playgroud)

在最后一种情况下,它查找node modulesin ../../../messages/proto/output/。将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

Run Code Online (Sandbox Code Playgroud)

我如何告诉webpack查看节点模块的当前路径而不是编译原型的路径?

for*_*d04 9

可以指定resolve.modules自定义目录,Webpack 会在其中搜索具有绝对导入路径的模块:

// inside webpack.config.js
const path = require('path');
module.exports = {
  //...
  resolve: {
    modules: [path.resolve(__dirname, 'node_modules'), 'node_modules']
  }
};
Run Code Online (Sandbox Code Playgroud)

这将使node_modules您的项目根目录(webpack 配置所在的位置)优先于默认设置"node_modules",默认设置通过节点模块解析算法解析路径。

更多信息:Webpack 文档:模块解析