早午餐如何禁用 RequireJS 模块包装

Posted

技术标签:

【中文标题】早午餐如何禁用 RequireJS 模块包装【英文标题】:Brunch how to disable RequireJS module wrapping 【发布时间】:2012-06-19 22:02:03 【问题描述】:

更新: 对于任何有兴趣将Brunch 与AngularJS 一起使用的人,我已经整理了一个种子项目angular-brunch-seed

我正在使用 Brunch 和 AngularJS。 AngularJS 提供了一个模块系统,因此使用 commonJS / AMD 导入文件的需要是多余的。是否可以为/app 目录中的文件禁用此功能?本质上,我希望它像 /vendor 目录一样编译未更改的文件。

所以首选的结果是:

  joinTo:
    'js/app.js': /^app/
    'js/vendor.js': /^vendor/

js/app.jsjs/vender.js 都包含来自每个文件夹的编译文件,但都没有打包。

有人有什么想法吗?

更新 语法从@jcruz 回答时发生了变化。这是现在执行此操作的方法。

最后我选择了@jcruz 答案的修改版本。

exports.config =
  modules:
    definition: false
    wrapper: (path, data) ->
      """
(function() 
  'use strict';
  #data
).call(this);\n\n
      """
  files:
    javascripts:
      defaultExtension: 'coffee'
      joinTo:
        'js/app.js': /^app/
        'js/vendor.js': /^vendor/

默认情况下,“原始”包装器不包括 coffeescript 的标准包装器。通过将 jsWrapper 设置为:

wrapper: (path, data) ->
  """
(function() 
  'use strict';
  #data
).call(this);
  """

文件将按预期包装。

【问题讨论】:

嘿,感谢您使用新语法更新此问题。我刚刚更新了早午餐,旧的 'jsWrapper' 语法不起作用。 【参考方案1】:

据我所见,现在已更改为模块配置: https://github.com/brunch/brunch/blob/stable/docs/config.md#modules

exports.config =
  paths:
    ...
  files:
    ...
  modules:
    wrapper: false
    definition: false

【讨论】:

【参考方案2】:

最近在https://github.com/brunch/brunch/commit/ec158cffd1b66d5db2093cf766000673aa0dd3a5 中添加了禁用模块包装的功能

我不相信带有这些功能的版本在 npm 上,但你可以从 github repo 重新安装早午餐

完成早午餐后,在 config.coffee 中将 jsWrapper 设置为“raw”

这样的……

exports.config =
  jsWrapper: 'raw'
  files:
    javascripts:
      defaultExtension: 'js'
      joinTo:
        'javascripts/app.js': /^app/
        'javascripts/vendor.js': /^vendor/

'brunch b' 和包装代码应该消失

【讨论】:

我最终传递了一个函数来将文件包装在标准的咖啡脚本包装器中,但除此之外它工作得很好。谢谢!【参考方案3】:

从(几乎)2017 年 1 月开始,必须将 npm enabled 与模块设置一起声明为 false。不过,我花了一段时间才发现。 (通过GitHub issue 找到这个)。希望这可以帮助。干杯。

这是一个有效的配置文件:

// See http://brunch.io for documentation.
module.exports = 
    files: 
      javascripts: 
        joinTo: 
          '/js/app.js': /^app/,
          '/js/vendor.js': /^(?!app)/
        
      ,
      stylesheets: 
        joinTo: 'css/app.css'
      
    ,

    paths: 
      public: '/priv/static'
    ,

    npm: 
      enabled: false
    ,

    modules: 
      wrapper: false,
      definition: false
    

【讨论】:

以上是关于早午餐如何禁用 RequireJS 模块包装的主要内容,如果未能解决你的问题,请参考以下文章

Karma + Jasmine + Durandal + KnockoutJS + RequireJS 单元测试中不匹配的匿名 define() 模块

尝试使用 axios 在 React/Phoenix 应用程序中进行 API 调用(使用早午餐)

Phoenix 1.1.4 早午餐问题

快手健康早午餐轻松做

requireJS 源码 data-main 的加载实现

如何禁用警告“定义”未使用 JSHint 和 RequireJS 定义