Mon package.json ressemble à ceci:
{
"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*"
}
}
Comme vous pouvez le voir, les commandes lint
et build:server
Sont difficiles à lire, donc je veux les diviser en plusieurs lignes.
J'ai essayé d'utiliser \
, Mais cela génère des erreurs comme:
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! ^
Comment puis-je faire ceci?
Seulement pour écrire un autre fichier bash comme build.sh
Et l'utiliser dans des scripts npm comme ./build.sh server
?
Vous ne pouvez pas faire ça.
Le code suivant est dans read-json.js
qui est dans le package node_modules/npm/node_modules/read-package-json
qui est utilisé dans run-script.js
éxécuter $ npm run-script ~~
ou $ npm run ~~
qui est son alias.
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, '')
}
}
Le key
dans scriptpath_
est comme "build:server"
dans votre code.
Le this[key]
est comme "./node_modules/babel-cli/bin/babel.js . -d dist/server --ignore node_modules,dist,client,public,webpack*"
dans votre code.
Donc, si vous écrivez le code qui n'est pas de type string
, en d'autres termes, si vous n'écrivez pas le texte string
dans package.json
, ce sera une erreur sauf si vous contribuez au package npm/read-package-json
.
Vous pouvez chaîner des tâches indépendantes.
Voici un exemple:
"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",
...
Voici un joli blog que j'ai utilisé à l'époque: https://www.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/