Рабочие области Yarn 2 не устанавливают зависимости

Я тестирую настройку рабочих пространств пряжи 2. Я думаю, что сделал это так, как должен, но когда я запускаю из корня, он не устанавливает никаких модулей и не создает символическую ссылку на зависимости, как ожидалось. У меня следующая структура папок

      root/
  package-a/
  package-b/

Каждая из них содержит package.json, а каждая из папок с пакетами содержит index.js. Вот файлы package.json

корень:

      {
  "name": "yarn-workspaces-poc",
  "version": "1.0.0",
  "license": "MIT",
  "private": true,
  "workspaces": [
    "package-a/",
    "package-b/"
  ]
}

пакет-а:

      {
  "name": "package-a",
  "version": "1.0.0",
  "type": "module",
  "dependencies": {
    "cross-env": "5.0.5",
    "package-b": "workspace:*"
  }
}

пакет-b:

      {
  "name": "package-b",
  "version": "1.0.0",
  "type": "module",
  "main": "index.js",
  "dependencies": {
    "cross-env": "5.0.5"
  }
}

Вот файлы js

пакет-а / index.js

      import test from "package-b";
console.log('testing');
console.log(test());

пакет-b / index.js

      export default function b() {
  console.log("From b. You made it!");
}

Ожидаемое поведение - когда я бегу yarn installиз корня там будет создана папка node_modules. Он должен содержать пакет cross-env, а также папку с символической ссылкой на package-b. Однако ничего не создается. Вот результат выполнения команды:

      ➤ YN0000: ┌ Resolution step
➤ YN0000: └ Completed
➤ YN0000: ┌ Fetch step
➤ YN0000: └ Completed
➤ YN0000: ┌ Link step
➤ YN0000: └ Completed
➤ YN0000: Done in 0s 96ms

редактировать:

Кроме того, если я просто запустил package-a, чтобы проверить его, это будет результат:

      internal/process/esm_loader.js:74
    internalBinding('errors').triggerUncaughtException(
                              ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'package-b' imported from /root/package-a/index.js
Did you mean to import package-b/index.js?
    at packageResolve (internal/modules/esm/resolve.js:655:9)
    at moduleResolve (internal/modules/esm/resolve.js:696:18)
    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:810:11)
    at Loader.resolve (internal/modules/esm/loader.js:86:40)
    at Loader.getModuleJob (internal/modules/esm/loader.js:230:28)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:56:40)
    at link (internal/modules/esm/module_job.js:55:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

2 ответа

Создать .yarnrc.yml в корне вашего монорепо,

Добавьте к нему следующее свойство:

      nodeLinker: node-modules

Пожалуй, самое заметное изменение в Yarn 2 - это система PnP. Попрощайся с node_modules

Это поведение по умолчанию, если вы не укажете «устаревший» node-modules компоновщик

Документировано здесь

Предостережения

Вы не можете использовать yarn workspaces focus <package> чтобы установить зависимости в одном пакете, как это предлагается в документации.

Так что, хотя это отлично работает для разработки, при развертывании это неприятно.

У меня была похожая проблема. Оказывается, новая версия Yarn не использует node_modules:

https://yarnpkg.com/getting-started/migration#final-notes

Это действительно сбивает с толку, поскольку это расходится с документацией для рабочих пространств ... в которой описывается результат, которого вы (и я) ожидали: https://yarnpkg.com/features/workspaces

После того, как вы запустите «yarn install», вы можете запустить серверы, как вы это делали раньше, но добавив «yarn workspace WORKSPACENAME» ..

Итак, если вы обычно начинаете так:

      rootfolder$ cd package-b
package-b$ node index.js

теперь вы запустите это из корневой папки:

      rootfolder$ yarn workspace package-b node index.js

Есть еще несколько вещей, которые вам, возможно, придется настроить для вашей IDE и т. Д. Здесь есть много информации: https://yarnpkg.com/getting-started/migration#switching-to-plugnplayhttps://yarnpkg.com/getting-started/migration#switching-to-plugnplay

Другие вопросы по тегам