Cli: [BUG] npm 7工作区软件包脚本执行

创建于 2020-10-06  ·  5评论  ·  资料来源: npm/cli

当前行为:

给定一个包含多个工作空间的软件包, 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

我希望能够:

  1. 执行npm workspace @me/workspace-package1 my-script以在工作区软件包@me/workspace-package1运行my-script脚本(例如,位于packages / package1中)
  2. cd进入工作区程序包,然后从那里直接运行脚本: cd packages/package1 && npm run my-script

重现步骤:

我创建了一个工作区游乐场来试验工作区包并比较yarn和npm7:
https://github.com/fabb/npm7-workspaces

  1. 在仓库中,运行npm install (成功)
  2. 在终端cd applications/app1 && npm run build
  3. 构建失败,因为找不到tsc

现在尝试用纱:

  1. 在仓库中,运行yarn (成功)
  2. 在终端cd applications/app1 && yarn run build
  3. 构建成功

或者与纱线:

  1. 在仓库中,运行yarn (成功)
  2. 在终端机yarn workspace @fabb/app1 build
  3. 构建成功

环境:

  • 作业系统:macOS Catalina 10.15.7
  • 节点:v12.18.0
  • npm:7.0.2-rc.2

有关

用于工作空间的RFC: https :

Bug Enhancement Release 7.x

最有用的评论

虽然不理想; 在解决此问题之前,一种解决方法是使用--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

所有5条评论

我有一个与npm7工作区功能有关的问题。 如果只需要将软件包安装到特定的工作空间,那么npm命令可以执行此操作。 Yarn和Lerna都支持这一点。

假设以下工作空间。

{
  "workspaces": ["packages/*"]
}
root
+ -- packages
  + -- package-a
  + -- package-b

$ yarn workspace package-a add react

莱娜

lerna add支持lerna的过滤器选项

$ lerna add react --scope=package-a

一个问题。 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不,据我测试,它没有。

此页面是否有帮助?
0 / 5 - 0 等级