【问题标题】:Javascript preprocessor to replace variable reference during build在构建期间替换变量引用的 Javascript 预处理器
【发布时间】:2013-12-08 21:27:46
【问题描述】:

有没有办法在构建过程中使用预处理器替换 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 的额外文件(可能用户只需要很少的 url)。

有没有类似html模板包的工具来处理javascript并替换所有变量。我更喜欢它与 grunt/yeoman 堆栈一起使用。

【问题讨论】:

  • 您可以毫无问题地通过 C 预处理器运行大多数 js。有点hacky,但它有效。
  • 感谢您的提示。我从未使用过它,如果它是基于节点/grunt 的,我可以轻松地将它与我的工作流程集成。无论如何,如果没有其他办法,我会调查一下。
  • 你为什么不简单地提供一个“外观”模块来保存像getBook() 这样的方法。这不仅会提高可读性,还会提高可维护性。

标签: javascript gruntjs yeoman grunt-usemin


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    小例子

    config.js 中:

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

    然后:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多