Grunt.js,警告:无法写入“src”文件(错误代码:EISDIR)

Posted

技术标签:

【中文标题】Grunt.js,警告:无法写入“src”文件(错误代码:EISDIR)【英文标题】:Grunt.js, Warning: Unable to write "src" file (Error code: EISDIR) 【发布时间】:2014-01-24 15:01:53 【问题描述】:

我有一个用CoffeeScript 写的Gruntfile,当cssmin 任务运行时,我不断收到一个(Error code: EISDIR)。以详细模式运行任务后,我得到以下信息:

Running "cssmin" task

Running "cssmin:src" (cssmin) task
Verifying property cssmin.src exists in config...OK
Files: assets/z.styles.concat.css.liquid -> src
Options: report=false
Reading assets/z.styles.concat.css.liquid...OK
Writing src...ERROR
Warning: Unable to write "src" file (Error code: EISDIR). Use --force to continue.

这是我的 cssmin 任务:

 cssmin: 
        src: 'assets/z.styles.concat.css.liquid'
        dest: 'assets/styles.min.css.liquid'

z.styles.concat.css.liquid 是在concat 运行后创建的,并成功输出到 assets 文件夹。 src 属性中列出的路径是正确的。

知道什么可能引发错误吗?

另外,为了方便起见,这里是整个 gruntfile。

咕噜咕噜的咖啡:

module.exports = (grunt) ->

# Project configuration.
  grunt.initConfig
    pkg: grunt.file.readJSON 'package.json'

    files:
      grunt:     ['gruntfile.js']
      css:       ['assets/screen.css', 'assets/styles.css.liquid']
      scss:      ['src/scss/**/*.scss']
      js:        ['src/js/**/*.js'] #(if we need liquid templating), 'src/js/**/*.js.liquid', 'assets/**/*.js.liquid']
      coffee:    ['src/js/coffee/**/*.coffee', 'src/js/coffee/**/*.coffee.liquid']
      img:       ['src/images/**/*.png,jpeg,svg,jpg,gif']

# Image Processing
    smushit:
      path:  
        src: '<%= files.img %>'  #recursively replace minified images
        dest: 'assets'

# Concatenation Processing
    concat: 
      css: 
        src: ['<%= files.css %>']
        dest: 'assets/z.styles.concat.css.liquid'     

      js: 
        src: ['<%= files.js %>']
        dest: 'src/js/z.scripts.concat.js'


# javascript Processing
    coffee:
          app:
            expand: true
            cwd: 'src/js/coffee'
            src: ['**/*.coffee', '**/*.coffee.liquid']
            dest: 'src/js'
            ext: '.js'

    uglify: 
      dist: 
        src: ['src/js/z.scripts.concat.js']
        dest: 'assets/scripts.min.js'

    jshint: 
      files: ['<%= files.grunt %>', 'src/js/z.scripts.concat.js']

      options: 
        jquery: true
        smarttabs: true
        curly: true
        eqeqeq: true
        immed: true
        latedef: true
        newcap: true
        noarg: true
        sub: true
        undef: true
        boss: true
        eqnull: true
        browser: true

      globals: 
        jQuery: true
        console: true
        undef: true
        unused: false



# CSS Processing
    compass: 
      dist: 
        options: 
          sassDir: 'src/scss'
          cssDir: 'assets'
          imagesDir: 'assets',
          javascriptsDir: 'assets',
          outputStyle: 'expanded'   

    cssmin: 
        src: 'assets/z.styles.concat.css.liquid'
        dest: 'assets/styles.min.css.liquid'


# watch tasks
    watch:
      options:
        nospawn: true
        events: ['changed', 'added']
      files: [
                '<%= files.js %>'
                '<%= files.coffee %>'
                '<%= files.scss %>'
            ]
      tasks: ['default']

  # These plugins provide necessary tasks.
  grunt.loadNpmTasks 'grunt-contrib-coffee'
  grunt.loadNpmTasks 'grunt-contrib-watch'
  grunt.loadNpmTasks 'grunt-contrib-concat'
  grunt.loadNpmTasks 'grunt-contrib-jshint'
  grunt.loadNpmTasks 'grunt-contrib-uglify'
  grunt.loadNpmTasks 'grunt-contrib-cssmin'
  grunt.loadNpmTasks 'grunt-smushit'
  grunt.loadNpmTasks 'grunt-contrib-compass'

# Default task.
  grunt.registerTask 'default', [
                      'coffee'
                      'concat:js'
                      'jshint'
                      'uglify'
                      'concat:css',
                      'cssmin'
                    ]

   # Minify task

   # Run the default task then losslessly minify images with Yahoo!'s Smush-It

  grunt.registerTask 'minify', ['default', 'smushit']

【问题讨论】:

您可以尝试使用 --verbose 选项运行任务吗? 运行 grunt your_task_name --verbose @AndreyShustariov 刚刚更新了问题 【参考方案1】:

在您的输出中,Grunt 尝试运行 cssmin:src 任务,然后尝试写入源文件。这不是我们想要的结果吗?

您需要为 cssmin 任务指定一个名称,因为它是一个多任务。有关更多信息,请参阅Grunt documentation。

将你的 grunt 配置更改为

cssmin:
    minify:
        src: 'assets/z.styles.concat.css.liquid'
        dest: 'assets/styles.min.css.liquid'

【讨论】:

宾果游戏芽!知道为什么必须命名此任务吗?【参考方案2】:

使用 NodeJS 4.2.2 和 Grunt 0.4.5,

当编译的文件名与现有目录命名相同时,我遇到了 EISDIR 写入错误。它们都处于同一层次结构级别。重命名解决了这个问题。

【讨论】:

【参考方案3】:

看来,src 指向目录。尝试将 /** 添加到路径的末尾。

assets/z.styles.concat.css.liquid/**

【讨论】:

Running "cssmin:src" (cssmin) task &gt;&gt; Destination not written because minified CSS was empty. 基本上我认为这只是告诉它寻找一个不存在的目录。 我记得,代码 EISDIR 的意思是,该目录是作为文件访问的。 嗯,不幸的是它是一个文件。

以上是关于Grunt.js,警告:无法写入“src”文件(错误代码:EISDIR)的主要内容,如果未能解决你的问题,请参考以下文章

警告:require_once(Composer/PHPMailer/vendor/phpmailer/phpmailer/src/autoload.php):无法打开流:没有这样的文件或目录

IntelliJ IDEA无法读取src下的配置文件 报错找不到 解决方案

VSCode无法写入用户设置 请打开用户设置并清除错误或警告, 然后重式

VSCode无法写入用户设置 请打开用户设置并清除错误或警告, 然后重式

如何使用 Grunt.js (0.3.x) 连接和缩小多个 CSS 和 JavaScript 文件

使用 Grunt.js 将所有文件从目录复制到另一个目录