Для пакета с несколькими рабочими пространствами npm install
устанавливает все пакеты из корневого каталога и пакетов рабочего пространства в корневой каталог node_modules
. В отличие от yarn, никакие зависимости пакетов рабочей области не устанавливаются в соответствующий пакет рабочей области node_modules
. Это означает, что невозможно напрямую выполнять сценарии, если текущий рабочий каталог является подпакетом.
Также, похоже, еще не существует команды npm workspace
для выполнения сценариев из пакетов рабочей области (сравните с yarn workspace
).
В этом сообщении блога упоминалось, что функция рабочих пространств npm должна работать аналогично функции yarn:
npm v7 будет иметь, по крайней мере, поддержку функции Workspace Yarn и подготовит почву для более продвинутых функций рабочей области в v8.
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019
Я ожидал, что смогу:
npm workspace @me/workspace-package1 my-script
чтобы запустить сценарий my-script
в пакете рабочей области @me/workspace-package1
(например, расположенном в 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://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md
Ссылка на 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
lerna add поддерживает параметры фильтра lerna
$ lerna add react --scope=package-a
Вопрос. Требуется ли для рабочих пространств npm, таких как yarn , в корневом пакете "private": true
? Документация должна включать информацию об этом.
Хотя не идеально; пока эта проблема не будет решена, можно использовать параметр --prefix
(см. документацию ).
Например, используя шаги @fabb для воспроизведения с репозиторием 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
(см. документацию ).Например, используя шаги @fabb для воспроизведения с репозиторием npm7-workspaces и заменяя команду шага 2 следующей:
Сборка прошла успешно: