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