Windows 10上的gulp-preprocess和环境变量

时间:2016-01-07 16:16:29

标签: windows gulp gulp-preprocess

我正在OSX和Windows 10上构建一个运行Node.js v4.2.x的js应用程序。

作为构建过程的一部分,我运行

BUILD_TYPE={my-build-type} gulp build

使用gulp-preprocess构建我的应用的特定配置。

我的gulp文件的相关部分看起来像

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 个答案:

答案 0 :(得分:1)

确定在定义环境变量后不使用空格设置环境变量。

类似的东西:

location ~ ^/profil/(cancel_email|activation) { ... }