web-dev-qa-db-fra.com

Lerna bootstrap ne lie pas les dépendances locales?

Quelle est la bonne façon de travailler avec lerna et les dépendances locales?


J'ai configuré deux modules dans un référentiel mono pour utiliser lerna avec une dépendance locale. Je m'attendais à ce que

$ lerna bootstrap
$ lerna run test

serait suffisant pour télécharger toutes les dépendances externes, lier une dépendance locale et exécuter et passer tous les tests dans tous les modules.

Comportement prévisible

Selon la documentation lerna bootstrap :

  1. Symlink ensemble tous les packages Lerna qui sont des dépendances les uns des autres.

Ainsi, je m'attendais à ce que lerna bootstrap créerait un lien symbolique dans module-b/node_modules en dessous de cela indique module-a (qui permettrait alors aux tests d'être exécutés et réussis).

Comportement actuel

Aucune liaison ne se produit, ce qui entraîne l'échec des tests:

lerna ERR! test d'exécution de fil terminé 1 dans lerna ERR 'module-b'! yarn run test stdout: yarn run v1.19.1 $ jest info Visitez https://yarnpkg.com/en/docs/cli/run pour la documentation sur cette commande.

lerna ERR! test de fil d'exécution stderr: FAIL ./import.test.js ● La suite de tests n'a pas pu s'exécuter

Cannot find module 'module-a' from 'import.test.js'

> 1 | const moduleA = require('module-a');
    | ^
  2 | 
  3 | test('should import module-a', () => {
  4 |   moduleA();

  at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:259:17)
  at Object.<anonymous> (import.test.js:1:1)

Étapes à reproduire

  1. Créez la structure de dossiers ci-dessous
  2. Copiez les fichiers en ligne dans leur répertoire correspondant
  3. Exécutez $ lerna bootstrap suivi par $ lerna run test
project-root
   + packages
   |       + module-a
   |       |      + package.json
   |       |      + index.js
   |       |
   |       + module-b
   |       |      + package.json
   |       |      + import.test.js
   |
   +  lerna.json     

packages/module-a/package.json

{
  "name": "module-a",
  "version": "1.0.0",
  "private": true,
  "main": "index.js",
  "scripts": {
    "test": "echo \"Test passed in module-a\""
  }
}

packages/module-a/index.js

module.exports = () => console.log('Log in module-a');

packages/module-b/package.json

{
  "name": "module-b",
  "version": "1.0.0",
  "private": true,
  "main": "index.js",
  "scripts": {
    "test": "jest"
  },
  "dependencies": {
    "module-a": "file:../module-a"
  },
  "devDependencies": {
    "jest": "^24.9.0"
  }
}

packages/module-b/import.test.js

const moduleA = require('module-a');

test('should import module-a', () => {
  moduleA();
});

lerna.json

{
  "npmClient": "yarn",
  "packages": [
    "packages/*"
  ],
  "version": "independent"
}

Observation

L'exécution de lerna link --force-local ne change pas le statu quo, le test échoue toujours car le module-b/node_modules/ ne contient toujours pas de référence à module-a.

Remarque

Je ne peux pas utiliser espaces de travail de fil avec lerna car module-b est une application Electron et le générateur d'électrons s'attend à ce que ses dépendances soient installées dans packages/module-b/node_modules/ dossier.

Environnement

  • lerna --version 3.18.4
  • npm --version 6.11.3
  • fil - version 1.19.1
  • node --version v12.12.0
  • macOS Mojave 10.14.6
2
matsev

J'ai essayé votre implémentation.

En utilisant file:../module-a dans packages/module-b/package.json ne fonctionne pas pour moi.

Vous pouvez le contourner facilement en écrivant un numéro de version pour module-a (peu importe qui puisque nous allons force-local)

{
  "name": "module-b",
  "version": "1.0.0",
  "private": true,
  "main": "index.js",
  "scripts": {
    "test": "jest"
  },
  "dependencies": {
    "module-a": "1.0.0"
  },
  "devDependencies": {
    "jest": "^24.9.0"
  }
}

A l'origine de votre projet:

Bootstrap et lien pour la version locale:

npx lerna bootstrap --force-local

Exécutez les tests:

npx lerna run test

2
kitimenpolku

pour moi, cela a fonctionné et installé les packages dans le dossier node_module

npx lerna exec -- npm install
0
D V Yogesh