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

zap*_*pee 6 javascript java npm node-modules npm-install

我是一名学习 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>
Run Code Online (Sandbox Code Playgroud)

当我在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
Run Code Online (Sandbox Code Playgroud)

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

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


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

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

Ben*_*son 15

使用 pnpm 代替 npm。

pnpm 项目的网站

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

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

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

     pnpm install --recursive
    
    Run Code Online (Sandbox Code Playgroud)

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

    pnpm i -r
Run Code Online (Sandbox Code Playgroud)

使用pnpm任何你通常会使用npm。(npmpnpm.


Sur*_*Rao 3

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

\n\n
npm install --prefix path_to_node_modules_location\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n
\n

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

\n
\n