我正在开发一个NPM 工作区节点项目。要部署工作区的包之一,我想运行npm install并获取一个node_modules目录作为该包的子目录,以便该包变得独立。
考虑下面的目录结构:
\nnode_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\nRun Code Online (Sandbox Code Playgroud)\n只需进行一次重复数据删除node_modules就非常适合单一存储库中的开发。但要部署该cloud-app包,我需要如下所示的结构:
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\nRun Code Online (Sandbox Code Playgroud)\n然后,我可以cloud-app照常上传目录,而无需将我的 NPM 工作区暴露给供应商的(不兼容的)CD 管道。
这有可能吗?这里正确的命令或程序是什么?
\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目录允许包充当独立模块。但是,有一个警告:该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)
我在提出上述问题时想到了这一点,但仍然很高兴知道是否有任何规范的、受支持的方法来做到这一点。