CSSMin给我返回了 "路径必须是字符串。收到了未定义" 的错误信息。

8

我的项目是一个基本的yo/angular项目。我有以下的cssmin配置。

    useminPrepare: {
      html: '<%= yeoman.app %>/index.html',
      options: {
        dest: '<%= yeoman.dist %>',
        flow: {
          html: {
            steps: {
              js: ['concat', 'uglifyjs'],
              css: ['cssmin']
            },
            post: {}
          }
        }
      }
    },
...
    cssmin: {
      dist: {
        files: {
          '<%= yeoman.dist %>/styles/main.css': [
            '.tmp/styles/{,*/}*.css'
          ]
        }
      }
    },
...
  grunt.registerTask('build', [
    'clean:dist',
    'wiredep',
    'useminPrepare',
    'concurrent:dist',
    'autoprefixer',
    'concat',
    'ngAnnotate',
    'copy:dist',
    'cdnify',
    'cssmin',
    'uglify',
    'filerev',
    'usemin',
    'htmlmin'
  ]);

当我运行grunt build时,出现以下错误:
Running "cssmin:generated" (cssmin) task
Warning: Path must be a string. Received undefined Use --force to continue.

Aborted due to warnings.


Execution Time (2016-05-26 00:57:04 UTC)
concurrent:dist        15s  
autoprefixer:server   3.3s 
ngAnnotate:dist       3.6s  
cdnify:dist          10.7s  
cssmin:dist          888ms  
Total 34.6s

我在其他帖子上看到过这个错误,但是没有涉及cssmin。我已经将package.json中的库升级到最新版本,这可能是原因。

这个项目曾经构建得很好。我无法确定缺少什么路径。有人知道我缺少什么路径吗?


1
我找到了这个链接:https://github.com/yeoman/generator-angular/issues/1320,请尝试使用 NVM 切换到 Node 0.10.45。 - jonrsharpe
@jonrsharpe链接的线程包含了peterkwidjaja的另一个链接,其中提供了一个解决方案,它是cssmin的一个补丁,不需要降级node github - molbioguy
4个回答

8

实际上,该问题已经解决,请更新您的版本至v1.0.2 链接在此处


7

以上回复中提到的答案对我有用。

所以在node_modules/grunt-contrib-cssmin/tasks/cssmin.js文件中, 在第41行,将参数添加或空字符串

//before
options.relativeTo = path.dirname(availableFiles[0]);

//after
options.relativeTo = path.dirname(availableFiles[0] || '');

来自:https://github.com/gruntjs/grunt-contrib-cssmin/pull/271/commits/11e655873dfa58b6edcda0113cee612f7a6b2ab9?diff=split

这是一个关于 it 技术的链接,具体内容请点击上方链接查看。

5

编辑:答案现已过时,请参阅下面的https://dev59.com/g5ffa4cB1Zd3GeqP7mzI#39482214

运行详细选项的更多信息:

youri$ grunt -v

Running "cssmin:generated" (cssmin) task
Verifying property cssmin.generated exists in config...OK
Files: [no src] -> dist/styles/vendor.css
Files: .tmp/styles/main.css -> dist/styles/main.css
Options: rebase=false, report="min", sourceMap=false
Warning: Path must be a string. Received undefined Use --force to continue.

看起来我们不是孤单的。通过跟踪问题面包屑,我找到了:

建议的解决方法是降级到node v5,确实有效(对我而言)。如果您觉得更方便,也可以安装一个node版本管理器。


1
下载Node v5?我是唯一一个对Grunt感到沮丧的人吗? - Gerardo Lima
你并不孤单。 - schellsan
1
已过时,参见 drmartin 的评论。 - Sonne

5
您只需要在您的package.json中进行如下更改:
"grunt-contrib-cssmin": "^1.0.2",

那么

npm install

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接