NodeJS 准备独立目录以使用npm工作区在monorepo中部署包

nc1teljy  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(103)

我有一个使用npm workspaces的monorepo。

root/
  app/
    package.json
  server/
    package.json
  store/
    package.json
  utils/
  package.json

app/package.json文件引用其package.json中的私有非发布依赖项,如下所示:

{
  "dependencies": {
    "@my-scope/server": "file:../server",
    "@my-scope/store": "file:../store",
    "@my-scope/utils": "file:../utils"
  }
}

这在本地运行时工作正常; npm将所有node_modules依赖项提升到repo的顶部,并在依赖包之间添加符号链接。但是,当我尝试生成一个.zip文件存档以部署到Azure时,事情就发生了变化。我当然不想部署我的整个monorepo,只是我的应用程序包。但是,由于所有的node_modules依赖项都提升到父目录,这将无法工作。
我试着在app目录中运行这个:

npm install --workspaces=false

它产生了这个,这是 * 接近 * 我正在寻找的:

app/
  node_modules/
    direct-dependency-a/
    direct-dependency-b/
    @my-scope/
      server/ -> ../../../server
      store/ -> ../../../store
      utils/ -> ../../../utils

...但它不安装@my-scope/*包的任何依赖项。
如何从npm workspaces monorepo生成一个完全独立的部署就绪目录?

os8fio9y

os8fio9y1#

我找到钥匙了。除了使用--workspaces=false运行安装之外,将--install-links选项添加到npm install命令可以正确安装软件包。它从monorepo包中复制文件而不是链接,并安装其依赖项。

相关问题