1
我正在OSX和Windows 10上構建一個運行Node.js v4.2.x的js應用程序。Windows 10上的gulp-preprocess和環境變量
由於我的構建過程的一部分,我跑
BUILD_TYPE={my-build-type} gulp build
它建立我的應用程序的特定配置,使用gulp-preprocess。
我一飲而盡文件的相關部分看起來像
var env = process.env;
...
.pipe(plug.preprocess({context: { BUILD_TYPE: env.BUILD_TYPE}}))
...
我的HTML的相關部分看起來像
<!-- @if BUILD_TYPE='live' -->
<script src="config/live.js"></script>
<!-- @endif -->
<!-- @if BUILD_TYPE='dev' -->
<script src="config/dev.js"></script>
<!-- @endif -->
<!-- @ifndef BUILD_TYPE -->
<script src="config/dev.js"></script>
<!-- @endif -->
<p>build type - <!-- @echo BUILD_TYPE --></p>
在OSX這個偉大工程,在運行BUILD_TYPE=dev gulp build
結果:
<script src="config/dev.js"></script>
<p>build type - dev</p>
但是,在Windows 10上,使用Node.js命令提示符,
個set BUILD_TYPE=dev && gulp build
結果:
<p>build type - dev</p>
在沒有腳本標記出現!它清楚地認識到了環境變量,因爲它由@echo BUILD_TYPE
打印。但是,腳本元素都不存在。
任何線索,爲什麼這可能會發生將不勝感激!
奇怪的是,如果我改變gulpfile到:
...
.pipe(plug.preprocess({context: { BUILD_TYPE: 'dev'}}))
...
我得到預期的輸出:
<script src="config/dev.js"></script>
<p>build type - dev</p>
更進一步,如果我調用preprocess
之前登錄的變量:
OSX
console.log(env.BUILD_TYPE);
//dev
console.log(typeof env.BUILD_TYPE);
//string
console.log(env.BUILD_TYPE === 'dev');
//true
的Windows 10
console.log(env.BUILD_TYPE);
//dev
console.log(typeof env.BUILD_TYPE);
//string
console.log(env.BUILD_TYPE === 'dev');
//false!
該死!謝謝 :) – RYFN