2017-05-28 8 views
0

私は、Windows 10上で、次のNPMスクリプトを設定しようとしている(のgit bashの、MINGW使用)NPMスクリプトでブレイク:私package.jsonにscriptsからNPMスクリプトの時計を使用してCLIに動作しますが、

スニペットをnpm i --save-dev node-sass postcss autoprefixer cssnano watchを実行した後

... 
"sass:build": "cat assets/styles/* | node-sass | postcss --no-map -u autoprefixer -u cssnano > dist/public/styles/styles.css.min", 
"sass:watch": "watch sass:build ./assets/styles/", 
... 

私はこのエラーを取得する:

$ npm run sass:watch

> [email protected] sass:watch C:\repos\thenewells
> watch sass:build ./assets/styles/

>Watching ./assets/styles/
The filename, directory name, or volume label syntax is incorrect.

しかし、私はをすればNPMスクリプトのバージョンエラーしながら、ディレクトリを検索しようとしたときは、この問題が発生した...

$ watch 'npm run sass:build' ./assets/styles/

> Watching ./assets/styles/

> [email protected] sass:build C:\repos\thenewells
> cat assets/styles/* | node-sass | postcss --no-map -u autoprefixer -u cssnano > dist/public/styles/styles.css.min

√ Finished stdin (373ms)

はなぜ、プレーンなCLIのバージョンに動作しますか?

私はまた、 'npm run sass:build'をsass:watchタスクに入れてみました。同じ効果。私はお尻を実行することができます:npm run sass:buildを介してビルドし、それが動作します。


回避策

私はwatchコマンドを実行するbashスクリプトを定義することができるよ、それが動作します。

SASS-見(ファイル拡張子なし、UNIX形式)

watch 'npm run sass:build' ./assets/styles/ 

そして今SASS:の仕事を見ては、ちょうどbash ./sass-watchすることができます。

これは問題なく動作します。だから私はおそらくより複雑なスクリプトチェーンでそれを連鎖させることができますので、私はnpm run devを働かせることができますが、私はむしろそのような奇妙なユースケースのためにスクリプトでスクリプトをラッピングする必要はありません。 sass:watchで書いたものが元々うまくいくはずです:\

WindowsをインストールしてUbuntuをインストールする別の理由は...?あるいは、npmは環境に何かをさせて、watchコマンドが何か他のものを期待するようにしますか?引用符を使用してコマンドを取り巻く

答えて

1

試してみて、それが動作するかどうかを確認:

"sass:watch": "watch \"npm run sass:build\" ./assets/styles/" 

、について説明:すべての

まず、NPM実行SASSなければならない:SASS、ないの構築:構築それはどのようにだからあなたが定義したnpmスクリプトを実行します。

第2に、コマンドを引用する必要がある理由は、watchはminimistを使用してprocess.argvからコマンドを読み込み、最初の引数をコマンドとして扱います。コマンド全体を引用符で囲まないと、 npmと残りの引数はすべてそれが監視するディレクトリとして扱われるため、間違ったファイル名を指定するとエラーが発生します。

3つ目の理由は、一重引用符がうまくいかない理由です。WindowsとMingwに関連する問題かもしれません。二重引用符と一重引用符の違いは、評価され、文字通りシェルで。

+0

これは私にbashスクリプトなしの正しい結果を与えました。なぜこれが機能するのか説明できますか? '' ''でコマンドを囲むのは機能しません。あなたの答えはあまり説明的ではなく、短期的には役立ちますが、規範的なものですが、私は(つまり、たくさんのnpmスクリプトを書くつもりで、ツールの理解を得たいと思っています。 ありがとうございました! –

+0

@SeanNewell私はいくつかの説明で私の答えを更新しました –

+0

ありがとう! 何らかの理由で、npmが起動したときにスクリプトがパスに追加されたと思っていました。 #違う –

関連する問題