2016-01-14 24 views
11

Quindi sto eseguendo attività in script di pacchetto npm ma voglio passare l'opzione di controllo in npm start.Utilizzo dell'opzione node-sass watch con npm run-script

Questo funziona:

"scripts": { 
    "scss": "node-sass src/style.scss dist/style.css -w" 
} 

Questo non si compila, orologio, o gettare qualsiasi errore:

"scripts": { 
    "scss": "node-sass src/style.scss dist/style.css", 
    "start": "parallelshell \"npm run scss -- -w\"" 
} 

non funziona senza parallelshell sia o senza stenografia.

Suppongo che il problema è il run-script sta passando l'argomento extra tra virgolette, quindi il comando viene fuori come:

node-sass src/style.scss dist/style.css "-w" 

mi piacerebbe far funzionare tutto questo senza l'aggiunta di dipendenze. Cosa mi manca?

Btw, sono in Windows 10 con prompt dei comandi/git bash.

+0

Si prega di considerare la mia risposta ([how-can-i- get-node-sass-watch-and-live-reload-lavoro-da-una-sola-NPM-script] (https://stackoverflow.com/questions/34350417/how-can-i-get-node -sass-watch-and-live-reload-to-work-da-a-single-npm-script/45183762 # 45183762)) su questo! –

risposta

14

Questa è la mia messa a punto per la costruzione di css

"scripts": { 
    "css": "node-sass src/style.scss -o dist", 
    "css:watch": "npm run css && node-sass src/style.scss -wo dist" 
}, 
"devDependencies": { 
    "node-sass": "^3.4.2" 
} 

La bandiera -o imposta la directory di output per il css. Ho un non-watching versione "css" perché la versione a guardare "css: guardare" ~ non costruisce, non appena è gestito ~, funziona solo sul cambiamento, così mi chiamano

npm run css 

prima di chiamare

node-sass src/style.scss -wo dist 

Se si desidera solo che venga eseguito il cambiamento, e non quando prima esecuzione, basta usare

"css:watch": "node-sass src/style.scss -wo dist" 
+0

Non c'è un modo per sfuggire alle doppie virgolette che passa? Come ho detto, questo funziona: 'node-sass src/style.scss dist/style.css -w' Questo non:' node-sass src/style.scss dist/style.css "-w "' Grazie per i suggerimenti però. Li userò per ora. –

+0

È possibile evitare la doppia quota utilizzando il backslash. Ad esempio: \ "- w \", in questo modo le virgolette non rendono il JSON non valido, ma appaiono quando si esegue il comando nel terminale –

+0

. Intendevo che 'npm esegui scss - -w' non passasse' node-sass src/style.css dist/style.scss "-w" '. –

1

Btw, ecco il mio cambiamento:

"scss": "node-sass src/style.scss dist/style.css", 
"start": "parallelshell \"npm run scss && npm run scss -- -w\" 

ora per ottenere che a tubo attraverso i miei compiti postcss ...

+0

Ho dovuto modificare la seconda riga per far funzionare l'osservatore (parallelshell 2.0): '" start ":" parallelshell \ "npm eseguire scss \" \ "npm eseguire scss - - -w \ "" ' – Rocco

+0

Huh, ho anche 2.0. Cosa succede se si eseguono le attività in sincronizzazione, ad esempio: 'npm esegui scss & npm esegui scss - -w'. Funziona in entrambi i casi per il mio scopo .. –

+0

non per me - l'osservatore non è rimasto in modalità "orologio", quindi mi sono attenuto ai documenti parallelshell. Inoltre, ho creato un task di "precompilazione": '" pre-prova ":" npm run scss "' – Rocco

11

Sulla base delle risposte precedenti, un'altra opzione è quella di sfruttare di NPM custom script arguments di rimanere DRY da non ripetere le build argomenti dello script nello script watch:

"scripts": { 
    "build:sass": "node-sass -r --output-style compressed src/style.scss -o dist", 
    "watch:sass": "npm run build:sass && npm run build:sass -- -w" 
} 

nell'esempio di cui sopra, lo script watch:sass funziona come segue:

  1. Eseguire lo script build:sass. Questo compilerà il tuo CSS.
  2. Eseguire nuovamente lo script build:sass, ma questa volta include il flag -w. Questo compilerà il tuo CSS quando uno dei tuoi file SASS cambia.

Avviso l'opzione -- utilizzata alla fine dello script watch:sass. Questo è usato per passare argomenti personalizzati durante l'esecuzione di uno script.Dal docs:

As of [email protected], you can use custom arguments when executing scripts. The special option -- is used by getopt to delimit the end of the options. npm will pass all the arguments after the -- directly to your script.

+2

https://media.giphy.com/media/1Z02vuppxP1Pa/giphy.gif – Pawel

0

più semplice, a mio parere, per un progetto rapido più piccolo, è solo aprire una nuova finestra bash e incolla:

node-sass src/ -wo dist