繁体   English   中英

在多个项目之间共享 node_modules 目录

[英]share node_modules directory between multiple projects

我是一名学习 EC6 的 Java 开发人员。 我使用 npm 下载 JavaScript 包,使用 webpack 创建最终的 bundle.js 文件。

我有一个不错的项目文件夹,其中包含带有 java 文件的 java 模块,我想将 EC6 JavaScript 文件添加到我的 web 模块中。 我使用 maven 来管理 java jar 依赖库。

这是我的文件夹结构:

my-project
  |-common-module
  |-ejb-module
  |-web-module-1
  |   |-src
  |       |-main
  |           |-java
  |               |-com.a.b
  |                   |-Hello.java
  |           |-webapp
  |               |-index.jsp
  |               |-bundle.js
  |               |-package.json
  |               |-webpack.config.js
  |               |-WEB-INF
  |               |-node_modules <-- I WANT THIS FOLDER TO BE MOVED AWAY FROM HERE 
  |               |-app          <-- react + ec6 javascript files
  |                   |-action
  |                   |-components
  |                   |-...
  |-web-module-2
      |-<same structure then under web-module-1>

当我在my-project/web-module-1/src/main/webapp文件夹中执行npm install...命令时,npm 在 webapp 目录下创建了一个名为node_modules的新目录。 该文件夹包含大量文件。

我的问题是,当我在我的第二个 web 项目上工作并执行相同的npm install...命令时,会在my-project/web-module-2/src/main/webapp目录下创建一个具有相同内容的第二个node_modules目录.

我可以使用一个通用的、分离的node_modules目录来避免重复文件并节省磁盘空间吗? 我可以在ex下存储js依赖项吗? /home/user/javascript/modules文件夹?

评论 1:我不想以 root 身份执行 npm 并使用npm -g install

评论 2:我也不想创建符号链接。

请你帮助我好吗?


编辑我做了什么:

  • 我为 JS 包创建了一个新文件夹: /home/user/javascript-modules
  • package.json文件复制到/home/user/javascript-modules
  • npm install --prefix /home/user/javascript-modules

之后,必要的 JS 模块被复制到我的javascript-modules/node-modules目录中。 好的!

但是当我尝试执行 webpack 时,我得到一个缺少模块的错误:

  • cd my-project/web-module-1/src/main/webapp
  • ./home/user/javascript-modules/node_modules/.bin/webpack

结果:

Hash: a6bf1a0d210729a54be9
Version: webpack 1.14.0
Time: 39ms

ERROR in Entry module not found: Error: Cannot resolve module 'babel-loader' in /home/user/java/intellijmy-project/web-module-1/src/main/webapp

评论:我的 webpack.config.js 文件包含一行内容: loader: 'babel-loader'

有没有办法为 webpack 指定“类路径”? 我的意思是告诉 webpack 模块在哪里。


更新正如您在评论中看到的,我尝试以多种不同的方式解决我的问题,但没有成功。 对我来说,webpack 似乎不支持我想做的事情。 好难过:(

这就对了。 如果有些人有任何有效的、好的和完整的解决方案,请与我们分享。 谢谢。

使用 pnpm 代替 npm。

pnpm 项目的网站

pnpm 使用硬链接和符号链接在磁盘上只保存一个版本的模块一次。 例如,当使用 npm 或 Yarn 时,如果您有 100 个项目使用相同版本的 lodash,则磁盘上将有 100 个 lodash 副本。 使用 pnpm,lodash 将被保存在磁盘上的一个位置,并且一个硬链接会将它放入应该安装它的 node_modules 中。

  1. 要在命令窗口中使用 npm 进行安装,请使用:

     npm install -g pnpm
  2. 要更新您现有的软件包安装(和所有子目录),请使用:

     pnpm install --recursive

或者,使用快捷命令进行递归安装:

    pnpm i -r

使用pnpm任何地方,你通常会使用npm (当pnpm不支持时,此命令安全地回退到npm函数。

为了让 npm 安装在自定义位置的目录中,您需要运行:

npm install --prefix path_to_node_modules_location

编辑:没有 package.json 的本地文件夹是不可能的。

所有项目唯一的“共同地点”是全球地点。 全局位置包含所有公共包,本地包含项目的特定包。

但是,我不确定为不同的项目拥有一个公共的本地node_modules 文件夹是否是一个好主意,因为您最终必须确保它们的依赖项不会因为包版本的差异而发生冲突。 这意味着尝试为多个项目维护 package.json。

为了配置 webpack 查看新位置,请在此处查看github 链接

这里的加载器是相对于它们所应用的资源解析的。 这意味着它们不是相对于配置文件解析的。 如果您从 npm 安装了加载器,并且您的 node_modules 文件夹不在所有源文件的父文件夹中,则 webpack 找不到加载器。 您需要将 node_modules 文件夹添加为 resolveLoader.root 选项的绝对路径。 (resolveLoader: { root: path.join(__dirname, "node_modules") })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM