Javascript预处理器在构建期间替换变量引用

时间:2013-12-08 21:27:47

标签: javascript gruntjs yeoman grunt-usemin

有没有办法在构建过程中使用预处理器替换javascript文件中的变量。我使用grunt,usemin,uglifyjs(yeoman堆栈的一部分)。

我目前从全局javascript对象中引用url。例如,

 my.url = {
     book: {
        get : '/my/book/{id},
        new: '/my/book'

     }
 }

在我的计划中,我可以将url称为my.url.book.get等。意图是

  • 不希望url字符串在整个程序中传播,因为开发过程中的任何更改都会使重构变得困难。
  • url可能基于服务器API生成,并且不希望在客户端中复制。

现在,一旦我对开发感到满意,我喜欢预处理所有的javascript文件,将所有这些引用替换为实际的url字符串。意图是避免使用所有URL加载额外的文件(可能用户只需要少量网址)。

是否有任何类似于html模板包的工具来处理javascript并替换所有变量。如果它适用于grunt / yeoman堆栈,我更喜欢。

2 个答案:

答案 0 :(得分:0)

您可以使用grunt-replace执行此操作。它允许在文本文件中进行各种字符串替换。我使用它来同步bower.jsonpackage.json等中的版本号,但显然您也可以将其用于源文件值替换。

那就是说,在你的情况下,我肯定会选择使用env变量的更动态的解决方案,例如grunt-env

答案 1 :(得分:0)

Try @Builder https://github.com/electricimp/Builder

Little example

in config.js:

@set apiEndpoint "https://somesite.com/api/v1"

then:

@include once "config.js"
let url = "@{apiEndpoint}"