Распространение сценариев NPM с пакетом для использования его проектом - PullRequest
0 голосов
/ 10 сентября 2018

Я переместил всю свою конфигурацию linting и связанные с ней пакеты / плагины / пресеты (для prettier, stylelint, eslint, commitlint) в пакет npm. Затем я использую этот пакет в нескольких проектах и ​​расширяю или объединяю конфигурацию в локальные файлы конфигурации для проектов, чтобы обеспечить согласованность и устранить необходимость установки и поддержания моих зависимостей разработки в актуальном состоянии.

Наряду с конфигурацией у меня есть ряд полезных сценариев npm, которые запускают линтеры и выполняют множество других функций, связанных с разработкой, например:

"lint:prettier": "prettier 'src/**/*.{js,json}' --write",
"lint:eslint": "eslint 'src/**/*.js'",
"lint:compatibilityCheck": "eslint --print-config .eslintrc.js | eslint-config-prettier-check",
"lint": "npm run lint:compatibilityCheck && npm run lint:prettier && npm run lint:eslint"

В настоящее время они дублируются во всех моих проектах, но я хотел бы распространить эти сценарии вместе с моим общим пакетом, чтобы они были определены в одном месте. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Из npm blogn кажется, что нет "прямых способов" выставить dev-скрипты в пакете npm.В блоге предлагается создать файлы JavaScripts, которые запускают ваши любимые скрипты с использованием модуля shelljs.

Пример : при условии, что вы хотите выставить lint:prettier": "prettier 'src/**/*.{js,json}' --write"

, оберните вызов в bin / lintprettier.js:

#! /usr/bin/env node
var shell = require("shelljs");
const path = require("path")

process.env.PATH += (path.delimiter + path.join(process.cwd(), 'node_modules', '.bin'));
shell.exec("prettier 'src/**/*.{js,json}' --write");

Затем добавьте егок экспортированным консольным скриптам в вашем package.json:

...
"bin": {
   "lint-prettier": "bin/lintprettier.js"
}
...

Наконец, вы можете повторно использовать ваш скрипт в вашем проекте:

"scripts": {
   "build": "...",
   "lint:prettier": "lint-prettier"
 }
0 голосов
/ 17 сентября 2018

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

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

Это отличный инструмент для управления пакетами в monorepo, и вы даже можете поднять общие зависимости между вашими пакетами. А в вашем случае он позволяет определить поверх всех ваших пакетов один главный package.json, где вы можете определить npm script s только один раз, и запустите его для всех пакетов (или только для немногих из них, используя функцию scope) с помощью одной команды.

...