Concat凉亭组件与咕噜声

Dee*_*psy 11 concatenation minify node.js gruntjs bower

我正在构建一个需要很少前端库/框架的应用程序,例如:

  • jQuery的
  • jQueryUI的
  • AngularJS
  • 基础

我正在使用bower下载组件.此时我的HTML看起来像:

<script src="components/jquery/jquery.js"></script>
<script src="components/angular/angular.js"></script>
<script src="components/etc/etc.js"></script>
Run Code Online (Sandbox Code Playgroud)

我的目标是创建一个grunt脚本,自动获取已安装的组件,连接并缩小它们并将其输出为lib.js.

问题:

通过我的所有研究,我弄清楚如何从目录中连接所有文件.我的目标是获取bower组件并连接它们,而不是在gruntfile中逐一列出它们.我怎么能成功呢?

是否可以使用我想要的模块而不是整个UI来制作自定义jQuery UI构建.

谢谢.

ste*_*eax 35

usemin是你的朋友.

安装usemin,copy,concat和uglify:

npm install --save-dev grunt-usemin
npm install --save-dev grunt-contrib-copy
npm install --save-dev grunt-contrib-concat
npm install --save-dev grunt-contrib-uglify
Run Code Online (Sandbox Code Playgroud)

在HTML文件中设置构建块:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>usemin</title>
  <!-- build:js lib.js -->
    <script src="components/jquery/jquery.js"></script>
    <script src="components/angular/angular.js"></script>
    <script src="components/etc/etc.js"></script>
  <!-- endbuild -->
</head>
<body>
<h1>usemin</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

设置你的Gruntfile:

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    copy: {
      dist: {
        files: [ {src: 'index.html', dest: 'dist/index.html'} ]
      }
    },

    'useminPrepare': {
      options: {
        dest: 'dist'
      },
      html: 'index.html'
    },

    usemin: {
      html: ['dist/index.html']
    }
  });

  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-copy');
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-usemin');

  grunt.registerTask('default', ['useminPrepare', 'copy', 'concat', 'uglify', 'usemin']);
};
Run Code Online (Sandbox Code Playgroud)

跑咕噜声

grunt
Run Code Online (Sandbox Code Playgroud)

结果:

??? Gruntfile.js
??? components
?   ??? angular
?   ?   ??? angular.js
?   ??? etc
?   ?   ??? etc.js
?   ??? jquery
?       ??? jquery.js
??? dist
?   ??? index.html
?   ??? lib.js
??? index.html
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>usemin</title>
  <script src="lib.js"></script>
</head>
<body>
<h1>usemin</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)


Man*_*utz 6

"我的目​​标是获取bower组件并将它们连接起来,而不是在gruntfile中逐一列出它们"

您可以从依赖项目录和子目录中获取所有javascript文件,并将它们连接起来:

grunt.config('concat.mydeps', {
  files: [{
    src: ['components/**/*.js'],
    dest: 'dist/lib.js'
  }]
})
Run Code Online (Sandbox Code Playgroud)

...但是如果脚本执行的顺序很重要,那么这就是灾难的秘诀:-).

此外,这些文件夹很可能包含缩小版和非缩小版,导致您包含一些脚本两次...

避免这种副作用的方法是:

grunt.config('concat.mydeps', {
  files: [{
    src: ['components/**/*.js', '!components/**/*min.js'],
    dest: 'dist/lib.js'
  }]
})
Run Code Online (Sandbox Code Playgroud)

......但同样,这肯定不是防弹的 - 给定的组件可能很好地具有构建版本,并且还有一个分裂的源.

恕我直言,唯一明智的出路是按照你需要的顺序明确列出你想要聚合的文件(就像你现在在html中那样).

  • 或者使用像npm模块这样的东西[grunt-bower-concat](https://github.com/sapegin/grunt-bower-concat) (3认同)