Как написать многострочные скрипты в сценариях npm?
Мой package.json выглядит следующим образом:
{
"name": "project",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"lint": "./node_modules/eslint/bin/eslint.js --format \"./node_modules/eslint-friendly-formatter/index.js\" .",
"build:server": "./node_modules/babel-cli/bin/babel.js . -d dist/server --ignore node_modules,dist,client,public,webpack*"
}
}
Как видите, команды lint
и build:server
трудны для чтения, поэтому я хочу разбить их на несколько строк.
Я пытался использовать \
, но он выдает такие ошибки, как:
npm ERR! Failed to parse json
npm ERR! Unexpected token ' ' at 11:80
npm ERR! :server": "./node_modules/babel-cli/bin/babel.js . -d dist/server \
npm ERR! ^
Как я могу это сделать?
Только для того, чтобы написать другой файл bash, например build.sh
и использовать его в сценариях npm, например ./build.sh server
?
Ответы
Ответ 1
Вы не можете этого сделать.
Следующий код находится в read-json.js
, который находится в пакете node_modules/npm/node_modules/read-package-json
, который используется в run-script.js
для выполнения $ npm run-script ~~
или $ npm run ~~
, который является его псевдонимом.
function scriptpath (file, data, cb) {
if (!data.scripts) return cb(null, data)
var k = Object.keys(data.scripts)
k.forEach(scriptpath_, data.scripts)
cb(null, data)
}
function scriptpath_ (key) {
var s = this[key]
// This is never allowed, and only causes problems
if (typeof s !== 'string') return delete this[key]
var spre = /^(\.[\/\\])?node_modules[\/\\].bin[\\\/]/
if (s.match(spre)) {
this[key] = this[key].replace(spre, '')
}
}
key
scriptpath_
в вашем коде как "build:server"
.
this[key]
"./node_modules/babel-cli/bin/babel.js . -d dist/server --ignore node_modules,dist,client,public,webpack*"
в вашем коде.
Итак, если вы пишете код, который не является типом string
, другими словами, если вы не пишете текст string
в package.json
, это будет ошибка, если вы не внесете вклад в пакет npm/read-package-json
.
Ответ 2
Вы можете связать независимые задачи.
Вот пример:
"scripts": {
"lint-jshint": "jshint --verbose --show-non-errors ./src/main/js",
"lint-eslint": "eslint ./src/main/js ./src/test/js",
"lint-csslint": "csslint ./src/main/js",
"lint": "npm run -s lint-jshint & npm run -s lint-eslint & npm run -s lint-csslint",
"pretest": "rimraf ./build/reports/tests && mkdirp ./build/reports/tests && npm run -s lint",
"test": "karma start ./src/test/resources/conf/karma.conf.js",
...
Вот хороший блог, который я использовал в то время: https://www.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/