複数のワークスペースを持つパッケージを指定すると、 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
私は次のいずれかができると期待しています:
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 :
ワークスペース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いいえ、私がテストした限りではありません。
最も参考になるコメント
理想的ではありませんが、 この問題が解決されるまで、回避策は
--prefix
オプションを使用することです(ドキュメントを参照)。たとえば、 @ fabbのステップを使用してreponpm7-workspacesで再現し、ステップ2のコマンドを次のように置き換えます。
ビルドは成功します: