【问题标题】:Using grunt to concatenate all vendor javascript files?使用 grunt 连接所有供应商 javascript 文件?
【发布时间】:2013-04-28 23:09:05
【问题描述】:

我正在使用 Yeoman (v1.x) 和 grunt (v0.4.2) 来构建一个 Angular 项目。 build 任务连接了我所有的 app/script JS 文件,但它使我的所有依赖文件都未连接,因此我构建的 index.html 会进行这些调用:

<script src="components/angular-unstable/angular.js"></script>
<script src="components/jquery/jquery.js"></script>
<script src="components/angular-resource/angular-resource.js"></script>
<script src="components/bootstrap/js/bootstrap-dropdown.js"></script>
<script src="components/moment/moment.js"></script>
<script src="components/underscore/underscore.js"></script>

<!-- xxxxxbuild:js scripts/scripts.js -->
<script src="scripts/274baf7d.scripts.js"></script>

我希望我的项目使用的所有组件(即angular.jsjquery.js 等)都位于scripts.js 中。重新配置 GruntFile 是否容易做到这一点?还是出于实际原因默认不这样做?

【问题讨论】:

  • 是的,我也有同样的问题,为什么将其保留为默认设置?如果您使用常见的 CDN 会发生什么,这是否意味着它们不应该被连接?还有诸如modernizr之类的东西呢?它们也不能连接,因为它需要位于页面顶部。

标签: javascript angularjs yeoman gruntjs


【解决方案1】:

是的,这很容易配置。只需在您传递 grunt concat 任务的源代码中添加供应商脚本即可。

// Project configuration.
grunt.initConfig({
  concat: {
    dist: {
      src: ['vendors/**/*.js', 'scripts/**/*.js'],
      dest: 'built.js'
    }
  }
});

【讨论】:

  • 我很好奇:我知道 browserify 会根据 require 语句进行连接。这是与 grunt 的功能重叠,还是有不同的用例?
  • 嗯,Grunt 只是一个任务运行器。它对串联或browserify一无所知。连接任务是一个 Grunt 插件。 Grunt 插件只是一个可以从命令行调用的注册任务。因此,使用 Browserify,您只需使用 browserify grunt 插件并将其添加到您的工作流程中 - 然后您将不需要任何连接任务。就我而言,我从不使用 concat 任务,因为我使用 RequireJs,它通过他的 Grunt 插件自己处理连接。
  • 感谢您的解释
  • 如果vendor中存在一些依赖(比如BackboneJS依赖Underscore),如何在不手动指定concat顺序的情况下全部concat?
  • @truongnguyen1912 使用依赖/模块系统。 Webpack、Browserify、Require.js 等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 2016-04-21
相关资源
最近更新 更多