Я ищу шаблон, чтобы избежать необходимости глобальных пакетов при работе с узлом, я хотел бы установить все, что мне нужно, с помощью npm install
, а затем просто выполнить каждую команду с npm run xxx
, без какого-либо глобального пакета. установлен.
Например, у меня есть jest, настроенный для запуска моих тестов.
Это зависимости в моем package.json:
[...]
},
"author": "",
"license": "ISC",
"dependencies": {
"@types/express": "^4.16.1",
"@types/node": "^11.10.5",
"express": "^4.16.4",
"ts-node-dev": "^1.0.0-pre.32",
"typescript": "^3.3.3333"
},
"devDependencies": {
"@types/jest": "^24.0.9",
"@types/supertest": "^2.0.7",
"jest": "^24.3.1",
"nodemon": "^1.18.10",
"supertest": "^4.0.0",
"ts-jest": "^24.0.0"
}
[...]
и вот некоторые скрипты, которые я настроил:
[...]
"scripts": {
"test": "jest --coverage",
"tsc": "tsc",
"watch": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/server.ts"
},
[...]
Но когда я выдаю npm run test
, я получаю эту ошибку:
$ npm run test
> ci-test@0.0.1 test /home/sas/devel/apps/vue/ci-test
> jest --coverage
sh: 1: jest: not found
npm ERR! file sh
[...]
Если я установлю jest глобально с npm install -g jest
, все будет нормально, но это именно то, чего я пытаюсь избежать.
Несколько предположений, которые я сделал, которые могут быть неправильными:
при запуске сценариев узел сначала ищет команды в node_modules / .bin (для использования локально установленных пакетов)
при вводе npm install
каждая команда командной строки устанавливается в node_modules / .bin
Последний не работает, потому что, хотя у меня есть шутка в моих devDependencies, в моем проекте нет файла node_modules / .bin / jest
$ ls node_modules/.bin/
acorn cdl esgenerate esvalidate is-ci json5 loose-envify mime nodetouch parser semver sshpk-sign strip-indent watch
atob escodegen esparse import-local-fixture jsesc js-yaml marked mkdirp nopt rc sshpk-conv sshpk-verify uglifyjs
С другой стороны, в качестве обходного пути, похоже, работает следующее:
"scripts": {
"test": "npx jest --coverage",
Но npx требует больше 10 секунд для установки jest каждый раз, когда я запускаю npm run test
Итак, каков будет правильный путь для достижения этого? O как я могу сказать npm установить jest в node_modules / .bin и использовать его, когда я ссылаюсь на него в своих скриптах?