Javascript Gruntjs使文件消失

Javascript Gruntjs使文件消失,javascript,angularjs,gruntjs,Javascript,Angularjs,Gruntjs,所以我正在使用grunt、bower和yeoman制作angularjs项目。在开发过程中,一切都很顺利,但当我尝试构建项目时,grunt决定需要从index.html的源代码列表中删除一个bower组件。因此,基本上我有以下清单: <script src="bower_components/jquery/jquery.js"></script> <script src="bower_components/angular/angular.js"></sc

所以我正在使用grunt、bower和yeoman制作angularjs项目。在开发过程中,一切都很顺利,但当我尝试构建项目时,grunt决定需要从index.html的源代码列表中删除一个bower组件。因此,基本上我有以下清单:

<script src="bower_components/jquery/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/sass-bootstrap/dist/js/bootstrap.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="bower_components/angular-cookies/angular-cookies.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/angular-animate/angular-animate.js"></script>

在我开始构建过程之后,最后一行angular animate消失了,所以整个应用程序都失败了,因为ngAnimate无法加载

为什么Grunt这么讨厌ngAnimate?我该怎么做才能做到 喜欢它就不会把它扔进垃圾箱

这是我的Gruntfile,如果它能提供任何意义的话

> // Generated on 2014-02-21 using generator-angular 0.7.1 'use strict';
> 
> // # Globbing // for performance reasons we're only matching one level
> down: // 'test/spec/{,*/}*.js' // use this if you want to recursively
> match all subfolders: // 'test/spec/**/*.js'
> 
> module.exports = function (grunt) {
> 
>   // Load grunt tasks automatically  
> require('load-grunt-tasks')(grunt);
> 
>   // Time how long tasks take. Can help when optimizing build times  
> require('time-grunt')(grunt);
> 
>   // Define the configuration for all the tasks   grunt.initConfig({
> 
>     // Project settings
>     yeoman: {
>       // configurable paths
>       app: require('./bower.json').appPath || 'app',
>       dist: 'dist'
>     },
> 
>     // Watches files for changes and runs tasks based on the changed files
>     watch: {
>       js: {
>         files: ['<%= yeoman.app %>/scripts/{,*/}*.js'],
>         tasks: ['newer:jshint:all'],
>         options: {
>           livereload: true
>         }
>       },
>       jsTest: {
>         files: ['test/spec/{,*/}*.js'],
>         tasks: ['newer:jshint:test', 'karma']
>       },
>       compass: {
>         files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'],
>         tasks: ['compass:server', 'autoprefixer']
>       },
>       gruntfile: {
>         files: ['Gruntfile.js']
>       },
>       livereload: {
>         options: {
>           livereload: '<%= connect.options.livereload %>'
>         },
>         files: [
>           '<%= yeoman.app %>/{,*/}*.html',
>           '.tmp/styles/{,*/}*.css',
>           '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
>         ]
>       }
>     },
> 
>     // The actual grunt server settings
>     connect: {
>       options: {
>         port: 9000,
>         // Change this to '0.0.0.0' to access the server from outside.
>         hostname: 'localhost',
>         livereload: 35729
>       },
>       livereload: {
>         options: {
>           open: true,
>           base: [
>             '.tmp',
>             '<%= yeoman.app %>'
>           ]
>         }
>       },
>       test: {
>         options: {
>           port: 9001,
>           base: [
>             '.tmp',
>             'test',
>             '<%= yeoman.app %>'
>           ]
>         }
>       },
>       dist: {
>         options: {
>           base: '<%= yeoman.dist %>'
>         }
>       }
>     },
> 
>     // Make sure code styles are up to par and there are no obvious mistakes
>     jshint: {
>       options: {
>         jshintrc: '.jshintrc',
>         reporter: require('jshint-stylish')
>       },
>       all: [
>         'Gruntfile.js',
>         '<%= yeoman.app %>/scripts/{,*/}*.js'
>       ],
>       test: {
>         options: {
>           jshintrc: 'test/.jshintrc'
>         },
>         src: ['test/spec/{,*/}*.js']
>       }
>     },
> 
>     // Empties folders to start fresh
>     clean: {
>       dist: {
>         files: [{
>           dot: true,
>           src: [
>             '.tmp',
>             '<%= yeoman.dist %>/*',
>             '!<%= yeoman.dist %>/.git*'
>           ]
>         }]
>       },
>       server: '.tmp'
>     },
> 
>     // Add vendor prefixed styles
>     autoprefixer: {
>       options: {
>         browsers: ['last 1 version']
>       },
>       dist: {
>         files: [{
>           expand: true,
>           cwd: '.tmp/styles/',
>           src: '{,*/}*.css',
>           dest: '.tmp/styles/'
>         }]
>       }
>     },
> 
>     // Automatically inject Bower components into the app
>     'bower-install': {
>       app: {
>         html: '<%= yeoman.app %>/index.html',
>         ignorePath: '<%= yeoman.app %>/'
>       }
>     },
> 
> 
> 
> 
>     // Compiles Sass to CSS and generates necessary files if requested
>     compass: {
>       options: {
>         sassDir: '<%= yeoman.app %>/styles',
>         cssDir: '.tmp/styles',
>         generatedImagesDir: '.tmp/images/generated',
>         imagesDir: '<%= yeoman.app %>/images',
>         javascriptsDir: '<%= yeoman.app %>/scripts',
>         fontsDir: '<%= yeoman.app %>/styles/fonts',
>         importPath: '<%= yeoman.app %>/bower_components',
>         httpImagesPath: '/images',
>         httpGeneratedImagesPath: '/images/generated',
>         httpFontsPath: '/styles/fonts',
>         relativeAssets: false,
>         assetCacheBuster: false,
>         raw: 'Sass::Script::Number.precision = 10\n'
>       },
>       dist: {
>         options: {
>           generatedImagesDir: '<%= yeoman.dist %>/images/generated'
>         }
>       },
>       server: {
>         options: {
>           debugInfo: true
>         }
>       }
>     },
> 
>     // Renames files for browser caching purposes
>     rev: {
>       dist: {
>         files: {
>           src: [
>             '<%= yeoman.dist %>/scripts/{,*/}*.js',
>             '<%= yeoman.dist %>/styles/{,*/}*.css',
>             '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
>             '<%= yeoman.dist %>/styles/fonts/*'
>           ]
>         }
>       }
>     },
> 
>     // Reads HTML for usemin blocks to enable smart builds that automatically
>     // concat, minify and revision files. Creates configurations in memory so
>     // additional tasks can operate on them
>     useminPrepare: {
>       html: '<%= yeoman.app %>/index.html',
>       options: {
>         dest: '<%= yeoman.dist %>'
>       }
>     },
> 
>     // Performs rewrites based on rev and the useminPrepare configuration
>     usemin: {
>       html: ['<%= yeoman.dist %>/{,*/}*.html'],
>       css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
>       options: {
>         assetsDirs: ['<%= yeoman.dist %>']
>       }
>     },
> 
>     // The following *-min tasks produce minified files in the dist folder
>     imagemin: {
>       dist: {
>         files: [{
>           expand: true,
>           cwd: '<%= yeoman.app %>/images',
>           src: '{,*/}*.{png,jpg,jpeg,gif}',
>           dest: '<%= yeoman.dist %>/images'
>         }]
>       }
>     },
>     svgmin: {
>       dist: {
>         files: [{
>           expand: true,
>           cwd: '<%= yeoman.app %>/images',
>           src: '{,*/}*.svg',
>           dest: '<%= yeoman.dist %>/images'
>         }]
>       }
>     },
>     htmlmin: {
>       dist: {
>         options: {
>           collapseWhitespace: true,
>           collapseBooleanAttributes: true,
>           removeCommentsFromCDATA: true,
>           removeOptionalTags: true
>         },
>         files: [{
>           expand: true,
>           cwd: '<%= yeoman.dist %>',
>           src: ['*.html', 'views/{,*/}*.html'],
>           dest: '<%= yeoman.dist %>'
>         }]
>       }
>     },
> 
>     // Allow the use of non-minsafe AngularJS files. Automatically makes it
>     // minsafe compatible so Uglify does not destroy the ng references
>     ngmin: {
>       dist: {
>         files: [{
>           expand: true,
>           cwd: '.tmp/concat/scripts',
>           src: '*.js',
>           dest: '.tmp/concat/scripts'
>         }]
>       }
>     },
> 
>     // Replace Google CDN references
>     cdnify: {
>       dist: {
>         html: ['<%= yeoman.dist %>/*.html']
>       }
>     },
> 
>     // Copies remaining files to places other tasks can use
>     copy: {
>       dist: {
>         files: [{
>           expand: true,
>           dot: true,
>           cwd: '<%= yeoman.app %>',
>           dest: '<%= yeoman.dist %>',
>           src: [
>             '*.{ico,png,txt}',
>             '.htaccess',
>             '*.html',
>             'views/{,*/}*.html',
>             'bower_components/**/*',
>             'images/{,*/}*.{webp}',
>             'fonts/*'
>           ]
>         }, {
>           expand: true,
>           cwd: '.tmp/images',
>           dest: '<%= yeoman.dist %>/images',
>           src: ['generated/*']
>         }]
>       },
>       styles: {
>         expand: true,
>         cwd: '<%= yeoman.app %>/styles',
>         dest: '.tmp/styles/',
>         src: '{,*/}*.css'
>       }
>     },
> 
>     // Run some tasks in parallel to speed up the build process
>     concurrent: {
>       server: [
>         'compass:server'
>       ],
>       test: [
>         'compass'
>       ],
>       dist: [
>         'compass:dist',
>         'imagemin',
>         'svgmin'
>       ]
>     },
> 
>     // By default, your `index.html`'s <!-- Usemin block --> will take care of
>     // minification. These next options are pre-configured if you do not wish
>     // to use the Usemin blocks.
>     // cssmin: {
>     //   dist: {
>     //     files: {
>     //       '<%= yeoman.dist %>/styles/main.css': [
>     //         '.tmp/styles/{,*/}*.css',
>     //         '<%= yeoman.app %>/styles/{,*/}*.css'
>     //       ]
>     //     }
>     //   }
>     // },
>     // uglify: {
>     //   dist: {
>     //     files: {
>     //       '<%= yeoman.dist %>/scripts/scripts.js': [
>     //         '<%= yeoman.dist %>/scripts/scripts.js'
>     //       ]
>     //     }
>     //   }
>     // },
>     // concat: {
>     //   dist: {}
>     // },
> 
>     // Test settings
>     karma: {
>       unit: {
>         configFile: 'karma.conf.js',
>         singleRun: true
>       }
>     }   });
> 
> 
>   grunt.registerTask('serve', function (target) {
>     if (target === 'dist') {
>       return grunt.task.run(['build', 'connect:dist:keepalive']);
>     }
> 
>     grunt.task.run([
>       'clean:server',
>       'bower-install',
>       'concurrent:server',
>       'autoprefixer',
>       'connect:livereload',
>       'watch'
>     ]);   });
> 
>   grunt.registerTask('server', function () {
>     grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
>     grunt.task.run(['serve']);   });
> 
>   grunt.registerTask('test', [
>     'clean:server',
>     'concurrent:test',
>     'autoprefixer',
>     'connect:test',
>     'karma'   ]);
> 
>   grunt.registerTask('build', [
>     'clean:dist',
>     'bower-install',
>     'useminPrepare',
>     'concurrent:dist',
>     'autoprefixer',
>     'concat',
>     'ngmin',
>     'copy:dist',
>     'cdnify',
>     'cssmin',
>     'uglify',
>     'rev',
>     'usemin',
>     'htmlmin'   ]);
> 
>   grunt.registerTask('default', [
>     'newer:jshint',
>     // 'test',
>     'build'   ]); };
//于2014-02-21使用发电机角度0.7.1“使用严格”生成;
> 
>//#Globbing//出于性能原因,我们只匹配一个级别
>down://'test/spec/{,*/}*.js'//如果您想递归地使用它
>匹配所有子文件夹://“test/spec/***.js”
> 
>module.exports=函数(grunt){
> 
>//自动加载grunt任务
>要求('load-grunt-tasks')(grunt);
> 
>//任务所需的时间。可以帮助优化生成时间
>要求(“时间咕噜”)(咕噜);
> 
>//定义所有任务grunt.initConfig的配置({
> 
>//项目设置
>约曼:{
>//可配置路径
>app:require('./bower.json').appPath | |“app”,
>dist:“dist”
>     },
> 
>//监视文件的更改,并根据更改的文件运行任务
>观察:{
>js:{
>文件:['/scripts/{,*/}*.js'],
>任务:['newer:jshint:all'],
>选项:{
>利弗雷罗德:没错
>         }
>       },
>jsTest:{
>文件:['test/spec/{,*/}*.js'],
>任务:['newer:jshint:test','karma']
>       },
>指南针:{
>文件:['/styles/{,*/}*{scss,sass}'],
>任务:['compass:server','autoprefixer']
>       },
>Grunfile:{
>文件:['grunfile.js']
>       },
>利弗雷罗德:{
>选项:{
>livereload:'
>         },
>档案:[
>'/{,*/}*.html',
>“.tmp/styles/{,*/}*.css”,
>“/images/{,*/}*{png,jpg,jpeg,gif,webp,svg}”
>         ]
>       }
>     },
> 
>//实际的grunt服务器设置
>连接:{
>选项:{
>港口:9000,
>//将其更改为“0.0.0.0”,以便从外部访问服务器。
>主机名:“localhost”,
>利弗雷罗德:35729
>       },
>利弗雷罗德:{
>选项:{
>开放:是的,
>基数:[
>“.tmp”,
>             ''
>           ]
>         }
>       },
>测试:{
>选项:{
>港口:9001,
>基数:[
>“.tmp”,
>"测试",,
>             ''
>           ]
>         }
>       },
>地区:{
>选项:{
>基:“”
>         }
>       }
>     },
> 
> /确保代码风格达到标准,没有明显错误。
>jshint:{
>选项:{
>jshintrc:“.jshintrc”,
>记者:require('jshint-style')
>       },
>全部:[
>“Gruntfile.js”,
>“/scripts/{,*/}*.js”
>       ],
>测试:{
>选项:{
>jshintrc:'test/.jshintrc'
>         },
>src:['test/spec/{,*/}*.js']
>       }
>     },
> 
>//清空文件夹以重新开始
>清洁:{
>地区:{
>档案:[{
>多特:没错,
>src:[
>“.tmp”,
>             '/*',
>“!/.git*”
>           ]
>         }]
>       },
>服务器:'.tmp'
>     },
> 
>//添加供应商前缀样式
>自动刷新器:{
>选项:{
>浏览器:[“上一版本”]
>       },
>地区:{
>档案:[{
>是的,
>cwd:“.tmp/styles/”,
>src:'{,*/}*.css',,
>目标:'.tmp/styles/'
>         }]
>       }
>     },
> 
>//自动将Bower组件注入应用程序
>“bower安装”:{
>应用程序:{
>html:“/index.html”,
>忽略路径:'/'
>       }
>     },
> 
> 
> 
> 
>//将Sass编译为CSS,并在需要时生成必要的文件
>指南针:{
>选项:{
>sassDir:“/styles”,
>cssDir:“.tmp/styles”,
>generatedImagesDir:'.tmp/images/generated',
>imagesDir:“/images”,
>javascriptsDir:“/scripts”,
>fontsDir:“/styles/fonts”,
>导入路径:'/bower_components',
>httpImagesPath:“/images”,
>httpGeneratedImagesPath:“/images/generated”,
>httpFontsPath:“/styles/fonts”,
>相对论:错,
>AssetCachBuster:错,
>raw:'Sass::Script::Number.precision=10\n'
>       },
>地区:{
>选项:{
>generatedImagesDir:“/images/generated”
>         }
>       },
>服务器:{
>选项:{
>debugInfo:true
>         }
>       }
>     },
> 
>//重命名文件以用于浏览器缓存
>修订版:{
>地区:{
>档案:{
>src:[
>“/scripts/{,*/}*.js”,
>“/styles/{,*/}*.css”,
>“/images/{,*/}*{png,jpg,jpeg,gif,webp,svg}”,
>“/styles/fonts/*”
>           ]
>         }
>       }
>     },
> 
>//读取usemin块的HTML以启用自动生成的智能生成
>//压缩、缩小和修订文件。在内存中创建配置,以便
>//可以对它们执行其他任务
>使用准备:{
>html:“/index.html”,
>选项:{
>目标:“”
>       }
>     },
> 
>//根据rev和useminPrepare配置执行重写
>usemin:{
>html:['/{,*/}*.html'],
>css:['/styles/{,*/}*.css'],
>选项:{
>资产目录:['']
>       }
>     },
> 
>//以下*-min任务在dist文件夹中生成缩小的文件
>imagemin:{
>dis