javascript – 无法获得grunt预处理来替换值
作者:互联网
我想用grunt preprocess.
在app / index.html中:
<script type="text/javascript">
var configValue = '/* @echo FOO */' || 'default value';
console.log('A');
console.log(configValue);
console.log('B');
</script>
我的gruntfile:
'use strict';
module.exports = function (grunt) {
...
grunt.initConfig({
...
preprocess: {
options: {
context : {
DEBUG: true,
FOO: 'bar'
}
},
multifile : {
files : {
'app/index.processed.html' : 'app/index.html'
//,'test/test.processed.js' : 'test/test.js'
}
}
}
});
grunt.loadNpmTasks('grunt-preprocess');
...
};
然后我使用命令:
% grunt preprocess
Running "preprocess:multifile" (preprocess) task
Done, without errors.
Elapsed time
preprocess:multifile 22ms
Total 22ms
它会生成文件app / index.processed.html,但此文件仍然包含以下行:
var configValue =’/ * @echo FOO * /’|| ‘默认值’;
该值尚未被替换.我错过了什么?
编辑:
我试图看看像这样的块会发生什么:
<!-- @ifdef DEBUG -->
<h1>Test Page</h1>
<!-- @endif -->
<!-- @exclude -->
<header>You're on dev!</header>
<!-- @endexclude -->
并将其替换为:< h1> Test Page< / h1> (保持与以前相同的上下文选项).
所以看起来正在进行预处理.预处理任务只是没有将’/ * @echo FOO * /’识别为要替换的东西.哪个是奇怪的,因为我从sample on github开始.
EDIT2:
< p><! - @echo FOO - >< / p>被替换为< p> bar< / p>,这是预期的.
解决方法:
区别在于您的示例位于html标记内,另一个可能位于.js文件中.
preprocess使用不同的语法为html和js(和咖啡)
> https://github.com/jsoverson/preprocess/blob/master/lib/regexrules.js
在html标签内使用此语法:
var configValue = '<!-- @echo FOO -->' || 'default value';
这是一个例子:
> https://github.com/jsoverson/preprocess#extended-html-syntax
标签:javascript,node-js,gruntjs,yeoman 来源: https://codeday.me/bug/20190831/1773654.html