Uglify无法解析" flow.js"

时间:2015-02-10 21:54:55

标签: bower grunt-usemin grunt-contrib-uglify angular-fullstack ng-flow

我遇到一个恼人的问题,其中uglify(通过grunt-usemin调用)无法解析名为flow.js的包的url。此软件包是作为ng-flow的依赖项安装的。

网址如下:

bower_components/flow.js/dist/flow.js

当我运行grunt build时,我收到以下错误:

Warning: Unable to read "dist/public/bower_components/flow.js" file (Error code: EISDIR). Use --force to continue.

由于我对usemin和uglify了解不多,我无法理解这个问题。我的猜测是当它到达url的第一个“flow.js”时会中断。所以,我尝试在我的bower.json中安装flow.js作为flowjs,但由于它是ng-flow的依赖项,因此在运行bower update时它仍然会获得flow.js。

任何人都可以告诉我有关此错误的更多信息,或建议我重命名依赖包的解决方法吗?

编辑:usemin Gruntfile的一部分

useminPrepare: {
  html: ['<%= yeoman.client %>/index.html'],
  options: {
    dest: '<%= yeoman.dist %>/public'
  }
},
usemin: {
  html: ['<%= yeoman.dist %>/public/{,*/}*.html'],
  css: ['<%= yeoman.dist %>/public/{,*/}*.css'],
  js: ['<%= yeoman.dist %>/public/**/*.js'],
  options: {
    assetsDirs: [
      '<%= yeoman.dist %>/public',
      '<%= yeoman.dist %>/public/assets/images'
    ],
    // This is so we update image references in our ng-templates
    patterns: {
      js: [
        [/(assets\/images\/.*?\.(?:gif|jpeg|jpg|png|webp|svg))/gm, 'Update the JS to reference our revved images']
      ]
    }
  }
}
grunt.registerTask('build', [
'clean:dist',
'injector:less', 
'concurrent:dist',
'injector',
'wiredep',
'useminPrepare',
'autoprefixer',
'ngtemplates',
'concat',
'ngAnnotate',
'copy:dist',
'cdnify',
'cssmin',
'uglify',
'rev',
'usemin']);

对于记录,使用https://github.com/DaftMonk/generator-angular-fullstack

生成grunt文件

2 个答案:

答案 0 :(得分:3)

问题是Grunt无法区分以'.js'结尾的目录和.js文件。

解决方法是使用通配符表达式来获取flow.js中的文件并排除目录本身。

编辑:您需要从usemin和rev。

中排除flow.js
usemin: {
  html: ['<%= yeoman.dist %>/public/{,*/}*.html'],
  css: ['<%= yeoman.dist %>/public/{,*/}*.css'],
  js: {
    src: ['<%= yeoman.dist %>/public/{,*/}*.js', '!<%= yeoman.dist %>/public/bower_components/flow.js'],
  },
  ...

rev: {
  dist: {
    files: {
      src: [
        '<%= yeoman.dist %>/public/{,*/}*.js',
        '<%= yeoman.dist %>/public/{,*/}*.css',
        '<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
        '<%= yeoman.dist %>/public/assets/fonts/*',
        '!<%= yeoman.dist %>/public/bower_components/flow.js'
      ]
    }
  }
},

答案 1 :(得分:0)

  

问题在于,Grunt无法区分以&#39; .js&#39;结尾的目录。和.js文件。

这是一个错误的陈述。 Grunt使用minimatch lib来配置如何搜索文件,并且有一个isFile过滤器,您可以将其设置为true以仅搜索文件。 See grunt.file.expand

关注this link,您会找到filter: 'isFile'的示例。

顺便说一句,你应该升级到usemin v3,因为这个问题似乎已经解决了,你可以在issue #474中看到

您可以看到我的修补程序here,我将项目迁移到usemin 3并将grunt-rev切换为grunt-filerev。