【问题标题】:Grunt task to optionally include an AMD module for different environmentGrunt 任务可选择包含用于不同环境的 AMD 模块
【发布时间】:2013-06-29 18:05:54
【问题描述】:

我正在开发一个 Web 应用程序,使用 AMD 的 Require.js 和 amplify.request 来抽象出我的 AJAX 调用。 amplify.request 的另一个优点是我定义了一个替代模块,其中包含我的请求的模拟版本,我可以将其用于测试目的。目前,我通过简单地在我的 main.js 文件中注释/取消注释模块引用来在我的请求模块的两个版本之间切换。

我想做的是使用 Grunt 根据我想要包含的模块创建不同的应用程序版本。我也可以用它来做一些事情,比如打开或关闭我的调试模式。我正在描绘类似于usemin 的东西,仅用于 JavaScript 内部的引用,而不是 HTML。

任何人都知道这样做的插件,或者对我如何使用 Grunt 做到这一点有建议?

【问题讨论】:

    标签: requirejs gruntjs


    【解决方案1】:

    在我们当前的项目中,我们有几个不同的环境。对于它们中的每一个,我们可以为 requirejs 构建指定不同的配置设置。 为了区分这些不同的环境,我使用了一个参数target

    您可以简单地将其传递给 grunt,方法是将其附加到您的调用中,例如

    grunt --target=debug
    

    你可以在 Gruntfile 中访问这个参数,通过使用grunt.option,比如

    var target = (grunt.option('target') || 'debug').toLowerCase();
    

    上面的行将默认为debug。然后,您可以使用 requirejs 的 paths 配置设置将构建指向正确的模块。示例代码如下。

    requirejs: {
        compile: {
            options: {  
                paths: {
                    "your/path/to/amplify/request": target === "debug" ? "path/to/mock" : "path/to/real",
                    }   
                }
            }
    }
    

    【讨论】:

    • 这真的很有帮助,并且完全可以让我根据环境使用/不使用特定模块。在我的代码中编辑特定变量的任何想法(例如,打开/关闭调试设置?)。我想我可以创建一个单独的模块,并以不同的方式设置变量,但如果可能的话,我宁愿动态设置它。
    • 如何定义一个包含开关变量的设置模块?根据您可以在另一个模块中加载的目标变量,其中包含这些开关值的不同值。在我们的项目中,我们有这样一个模块(AppSettings),但我们没有加载另一个模块,而是使用 requirejs 的 onBuildWrite 选项覆盖设置。
    • 哇,onBuildWrite 是一个我不知道的非常强大的选项。我认为这肯定符合要求,或者我可以按照你的建议做,只是换掉整个模块。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 2017-08-10
    • 2015-07-01
    • 2012-11-29
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多