Cli: [ОШИБКА] Выполнение сценария пакета рабочей области npm 7

Созданный на 6 окт. 2020  ·  5Комментарии  ·  Источник: npm/cli

Текущее поведение:

Для пакета с несколькими рабочими пространствами 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

Я ожидал, что смогу:

  1. Выполните npm workspace @me/workspace-package1 my-script чтобы запустить сценарий my-script в пакете рабочей области @me/workspace-package1 (например, расположенном в 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.0-rc.2

Связанный

RFC для рабочих пространств: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md

Bug Enhancement Release 7.x

Самый полезный комментарий

Хотя не идеально; пока эта проблема не будет решена, можно использовать параметр --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

Все 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

Лерна

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 нет, насколько я тестировал, это не так.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги