运行“npm install”,就好像包不在工作区中一样

Mar*_*tin 5 node.js npm

我正在开发一个NPM 工作区节点项目。要部署工作区的包之一,我想运行npm install并获取一个node_modules目录作为该包的子目录,以便该包变得独立。

\n

考虑下面的目录结构:

\n
node_modules\npackages\n  \xe2\x94\x9c cloud-app\n  \xe2\x94\x82  \xe2\x94\x9c src\n  \xe2\x94\x82  \xe2\x94\x94 package.json\n  \xe2\x94\x9c helpers\n  \xe2\x94\x82  \xe2\x94\x9c src\n  \xe2\x94\x82  \xe2\x94\x94 package.json\n  \xe2\x94\x9c business-logic\n  \xe2\x94\x82  \xe2\x94\x9c src\n  \xe2\x94\x94  \xe2\x94\x94 package.json\npackage.json\n
Run Code Online (Sandbox Code Playgroud)\n

只需进行一次重复数据删除node_modules就非常适合单一存储库中的开发。但要部署该cloud-app包,我需要如下所示的结构:

\n
packages\n  \xe2\x94\x9c cloud-app\n  \xe2\x94\x82  \xe2\x94\x9c node_modules\n  \xe2\x94\x82  \xe2\x94\x9c src\n  \xe2\x94\x82  \xe2\x94\x94 package.json\n  \xe2\x94\x9c helpers\n  \xe2\x94\x82  \xe2\x94\x9c src\n  \xe2\x94\x82  \xe2\x94\x94 package.json\n  \xe2\x94\x9c business-logic\n  \xe2\x94\x82  \xe2\x94\x9c src\n  \xe2\x94\x94  \xe2\x94\x94 package.json\npackage.json\n
Run Code Online (Sandbox Code Playgroud)\n

然后,我可以cloud-app照常上传目录,而无需将我的 NPM 工作区暴露给供应商的(不兼容的)CD 管道。

\n

这有可能吗?这里正确的命令或程序是什么?

\n

小智 5

这似乎有效。尝试工作空间参数:

cd <my_project_root>
npm i --workspaces=false
Run Code Online (Sandbox Code Playgroud)

https://docs.npmjs.com/cli/v9/commands/npm-install#workspaces

  • 这正是我所需要的。包的“node_modules”文件夹填充了包的所有直接依赖项,并在包文件夹中生成了“package-lock.json”文件。 (2认同)

Mar*_*tin 0

虽然我没有找到实现此目标的标准方法,但有一种对我有用的稍微有点古怪的方法:

复制node_modules目录允许包充当独立模块。但是,有一个警告:该node_modules目录包含工作区中每个包的符号链接。因此,当将其复制到包中并且遵循符号链接时,循环就开始了。为了防止这种情况,我们首先必须删除我们的包。因此,部署脚本可能如下所示:

rm ./node_modules/cloud-app
cp -rL ./node_modules ./cloud-app/node_modules
# deploy cloud-app here
Run Code Online (Sandbox Code Playgroud)

我在提出上述问题时想到了这一点,但仍然很高兴知道是否有任何规范的、受支持的方法来做到这一点。