1. ホーム
  2. javascript

[解決済み] npm scriptsで複数行のスクリプトを書くには?

2023-06-10 12:10:22

質問

私の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*"
  }
}

ご覧のように lintbuild: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 ?

どのように解決するのですか?

そんなことできないよ。

次のコードは 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, '')
  }
}

keyscriptpath_ は、まるで "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 .