Cli: [バグ] npm7ワークスペースパッケージスクリプトの実行

作成日 2020年10月06日  ·  5コメント  ·  ソース: npm/cli

現在の動作:

複数のワークスペースを持つパッケージを指定すると、 npm installは、ルートおよびワークスペースパッケージのすべてのパッケージをルートnode_modulesインストールします。 ヤーンとは異なり、ワークスペースパッケージの依存関係はそれぞれのワークスペースパッケージ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. ビルドは成功します

環境:

  • OS:macOS Catalina 10.15.7
  • ノード:v12.18.0
  • npm:7.0.0-rc.2

関連

ワークスペースのRFC: https

Bug Enhancement Release 7.x

最も参考になるコメント

理想的ではありませんが、 この問題が解決されるまで、回避策は--prefixオプションを使用することです(ドキュメントを参照)。

たとえば、 @ fabbのステップを使用してreponpm7-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件

ワークスペースRFCへのリンクはhttps://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.mdです

npm7ワークスペース機能に関連する質問がありました。 特定のワークスペースにのみパッケージをインストールする必要がある場合、それを行うためのnpmコマンドは何ですか。 ヤーンとレルナはどちらもこれをサポートしています。

次のワークスペースを想定します。

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

$ yarn workspace package-a add react

レルナ

lernaaddはlernaのフィルターオプションをサポートし

$ lerna add react --scope=package-a

質問。 ヤーンのようなnpmワークスペースでも、ルートパッケージに"private": trueですか? ドキュメントには、これに関する情報を含める必要があります。

理想的ではありませんが、 この問題が解決されるまで、回避策は--prefixオプションを使用することです(ドキュメントを参照)。

たとえば、 @ fabbのステップを使用してreponpm7-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ワークスペースでも、ルートパッケージに"private": trueですか? ドキュメントには、これに関する情報を含める必要があります。

@detjいいえ、私がテストした限りではありません。

このページは役に立ちましたか?
0 / 5 - 0 評価