如何使Webpack在位于项目文件夹外部的js脚本中使用项目的“ node_modules”?

时间:2018-08-24 15:12:39

标签: javascript node.js webpack

我有Node.js项目和以下文件夹结构:

  • lib
    • awesome-formatter.js
  • FrontEndApp
    • prettify.js
    • node_modules
      • 很棒的解析器
  • BackEndApp
    • ...

我在awesome-parser脚本中使用awesome-formatter.js模块和prettify.js库,如下所示:

require('awesome-parser')

require('../lib/awesome-formatter.js')

awesome-formatter.js反过来也应该使用awesome-parser

require('awesome-parser')

我的FrontEndApp已配置为使用Webpack,并且我正在尝试使用npm run dev命令在开发模式下运行它。但是,出现以下错误:

  

ERROR编译失败,出现1个错误

     

未找到这些依赖项:

     /home/user/dev/lib/awesome-formatter.js中的

*令人敬畏的解析器

我不想在awesome-formatter.js内移动FrontEndApp,因为我也在BackEndApp项目(可能还有其他一些项目)中使用了它,并且我不想创建在“ lib”中分开“ node_modules”,只是为了不复制磁盘上已安装的模块。

所以,我的问题是,如何使Webpack在位于项目文件夹外部的js脚本中使用项目的“ node_modules”?

P.S。当然,有一些变通办法,例如符号链接或从lib/awesome-fromatter制作功能齐全的模块(带有package.json等)并将其安装到FrontEndApp/node_modules中,但是有直接的方法来解决此问题吗? / p>

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:resolve.modules已添加到Webpack配置文件中。

module.exports = {
  ...
  resolve: {
  ...
    modules: [
      'node_modules',
      resolve('node_modules')
    ]
  },
  ...
}

这意味着Webpack在“ node_modules”中搜索模块作为相对子文件夹(这是通常的行为),并且也在项目的“ node_modules”的绝对路径中搜索:resolve('node_modules'),因此脚本项目外部的文件夹(例如我结构中的lib)可以找到并使用它。