我有一个使用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生成一个完全独立的部署就绪目录?
1条答案
按热度按时间os8fio9y1#
我找到钥匙了。除了使用
--workspaces=false
运行安装之外,将--install-links
选项添加到npm install
命令可以正确安装软件包。它从monorepo包中复制文件而不是链接,并安装其依赖项。