给定一个包含多个工作空间的软件包, npm install
会将根目录和工作区软件包的所有软件包都安装到根目录node_modules
。 与yarn不同,工作区软件包的依赖项未安装到各自的工作区软件包node_modules
。 这意味着,当当前工作目录是子包时,不可能直接执行脚本。
此外,似乎还不存在npm workspace
命令来执行来自工作空间包的脚本(与yarn workspace
)。
这篇博客文章提到npm工作区功能的工作方式应类似于yarn中的一种:
npm v7将至少具有Yarn的工作区功能支持,并将为v8中更高级的工作区功能奠定基础。
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019
我希望能够:
npm workspace @me/workspace-package1 my-script
以在工作区软件包@me/workspace-package1
运行my-script
脚本(例如,位于packages / package1中)cd packages/package1 && npm run my-script
我创建了一个工作区游乐场来试验工作区包并比较yarn和npm7:
https://github.com/fabb/npm7-workspaces
npm install
(成功)cd applications/app1 && npm run build
tsc
现在尝试用纱:
yarn
(成功)cd applications/app1 && yarn run build
或者与纱线:
yarn
(成功)yarn workspace @fabb/app1 build
用于工作空间的RFC: https :
一个问题。 npm工作区(例如yarn)是否也要求根包具有"private": true
? 文档中应包含有关此信息。
虽然不理想; 在解决此问题之前,一种解决方法是使用--prefix
选项(请参阅docs )。
例如,使用@fabb的步骤与repo npm7-workspaces复制,并将步骤2的命令替换为以下内容:
npm run --prefix applications/app1 build
构建成功:
npm7-workspaces % npm -v
7.0.2
npm7-workspaces % npm run --prefix applications/app1 build
> @fabb/[email protected] build
> tsc index.ts
npm7-workspaces % echo $?
0
一个问题。 npm工作区(例如yarn)是否也要求根包具有
"private": true
? 文档中应包含有关此信息。
@detj不,据我测试,它没有。
最有用的评论
虽然不理想; 在解决此问题之前,一种解决方法是使用
--prefix
选项(请参阅docs )。例如,使用@fabb的步骤与repo npm7-workspaces复制,并将步骤2的命令替换为以下内容:
构建成功: