2017-09-14 4 views
2

私のワークフローは、単純なシェルコマンドとともにnode_modulesでコマンドを実行するnpmスクリプトです。Windows上のnpmスクリプトでバックティックを使用する方法

残念なことに、これは一部のコマンドでバッククイックを使用しているため、Windowsユーザーにとっては難しくなります(下記の例を参照)。私はshellJS/shxに私のビルドのためにボランティアを要求していますので、私のレポはクロスプラットフォームを構築しますが、npmスクリプトのバックティックの解決策を見つけることはできません。

質問:

  • NPMどのシェルを使用していますか?ウィンドウでは、バッククォートをサポートしていないようです。
  • 回避策はありますか?配管は助けにならない、悲しいかな、RM、mkdirなどは標準入力を使わない。 package.jsonで

例のバッククォートの使用:bin/pkgkey.js mkdirsスクリプトは単にmkdirs配列を返し

"mkdirs": [ 
    "dist/AS", 
    "libs", 
    "models/scripts" 
    ], 
    "scripts": { 
    "mkdirs": "mkdir -p `bin/pkgkey.js mkdirs`", 
    .... 

..。これは奇妙に思えるかもしれませんが、npmスタイルのワークフローを整理するのに最適です。

pkgkeyスクリプト(簡体字):それはあなたのユースケースのために働く場合

#!/usr/bin/env node 

const fs = require('fs') 
const json = JSON.parse(fs.readFileSync('package.json')) 
const key = process.argv[2] 
let val = json[key] 
if (Array.isArray(val)) val = val.join(' ') 

process.stdout.write(val) 
+1

ないWindowsユーザーが、あなたは引用符逃れることはできません: ' – Dominik

+0

@Dominikザ・OPはバッククォートを述べ、/ pkgkey.js mkdirs \ " "ます。mkdir -p \" ビン"::' ' "mkdirsを" \ ''しかし、ええ。 – ifconfig

+0

ええ、彼は彼らがすべてのシェルで動作する引用符に移動するように動作していないと言った...いいえ? – Dominik

答えて

0

チェッククロスenvが、わかりませんが、私は独立したNPMスクリプトプラットフォームを作るためにそれを使用

npm i --save-dev cross-env 

"mkdirs": "cross-env mkdir -p ..." 

https://www.npmjs.com/package/cross-env

関連する問題