2016-01-07 72 views
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! 

回答

1

你有沒有保證您使用沒有空格定義後設置環境變量。

喜歡的東西:

set BUILD_TYPE=dev&&gulp build

+0

該死!謝謝 :) – RYFN