Подтвердить что ты не робот

Как написать многострочные скрипты в сценариях 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?

4b9b3361

Ответ 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/