Ich möchte versuchen, mit npm meine verschiedenen Build-Aufgaben für eine Webanwendung auszuführen. Ich weiß, dass ich dies tun kann, indem ich scripts
meinem package.json
Like ein Feld hinzufüge :
"scripts": {
"build": "some build command"
},
Dies wird unhandlich, wenn Sie komplexere Befehle mit einer Reihe von Optionen haben. Ist es möglich, diese Befehle in ein Bash-Skript oder etwas in diese Richtung zu verschieben? Etwas wie:
"scripts": {
"build": "build.sh"
},
Wo npm run build
würden die Befehle in der build.sh
Datei ausgeführt?
Beim Lesen dieses Beitrags scheint es so zu sein, aber ich weiß nicht genau, wo ich meine build.sh
Datei ablegen soll oder ob mir etwas fehlt.
rm
? installiere rimraf und verwende es dann in einem npm-Skript .mkdir -p
? installieremkdirp
und verwende das dann in einem npm-Skript. Sie haben eine plattformunabhängige universelle Skriptsprache , genau dort. Tun Sie dann nicht so, als wäre es nur Nix. Wird die Kommandozeile zu kompliziert? Verwenden Sie einen Task Runner wiegrunt
odergulp
. Halte es universell.grunt
odergulp
odermkdirp
usw. geliefert werden, ohne dass Benutzer sie global installieren müssen, und sie dann so aufrufen, als wären sie global in einem npm-Skript installiert , wie z"build": "mkdirp build && less style/index.less > static/css/style.css && webpack"
. Solange die von Ihnen aufgerufenen Befehle von npm verwaltet werden (dh in den Abhängigkeitslisten package.json), funktioniert dies nur. Verwenden Sie für jeden Befehl "Dies funktioniert nur für ein Betriebssystem" ein Knotenmodul, das universell dasselbe tut.Antworten:
Es ist absolut möglich ...
"scripts": { "build": "./build.sh" },
Stellen Sie außerdem sicher, dass Sie einen Hash-Knall oben in Ihre Bash-Datei einfügen
#!/usr/bin/env bash
Stellen Sie außerdem sicher, dass Sie über Berechtigungen zum Ausführen der Datei verfügen
chmod +x ./build.sh
Schließlich wäre der Befehl zum Ausführen von build in npm
npm run build
quelle
"build": ". ./path/to/my/awesome/build/file/build.sh"
'.' is not recognized as an internal or external command, operable program or batch file.
Siehe hier für weitere Details zu erklären , warum. Wenn Sie außerdem festlegen, dass sh-Dateien standardmäßig mit gitbash oder einer anderen Umgebung geöffnet werden, in der Bash-Skripte ausgeführt werden können, funktioniert dies."name": "bash ./name.sh"
Noch einfacher:
Ich mache dies routinemäßig für einmalige und PoCs ohne VCS
package.json{ "scripts": { "ship": "rsync -avz deployable/* <some-server>:/var/www/some-site/sub-dir/" }, } ...
quelle