grunt contrib sass源映射启用

grunt contrib sass源映射启用,sass,gruntjs,watch,no-cache,source-maps,Sass,Gruntjs,Watch,No Cache,Source Maps,我无法在grunt中使用很多contrib sass功能。一天前我跳进了咕噜声,我发现它真的很好 链接到contrib sass repo,该公司表示sourcemaps应能正常工作: 注意:我有sass最新功能,如果我使用:sass--watch--scss--sourcemap--no cache和google chrome canary sourcemaps以及sass样式表调试,这个功能就可以正常工作 这是我的Grunfile.js: module.exports = function

我无法在grunt中使用很多contrib sass功能。一天前我跳进了咕噜声,我发现它真的很好

链接到contrib sass repo,该公司表示sourcemaps应能正常工作:

注意:我有sass最新功能,如果我使用:
sass--watch--scss--sourcemap--no cache
和google chrome canary sourcemaps以及sass样式表调试,这个功能就可以正常工作

这是我的Grunfile.js:

module.exports = function(grunt) {

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd hh:mm:ss") %> */\n',

    concat: {
      options: {
        separator: '\n// New file\n',
        banner: '<%= banner %>'
      },
      develop: {
        files: [
          { src: ['js/develop/plugins.js', 'js/develop/main.js'], dest: 'js/concDev.js' }
        ]
      },
      vendor: {
        files: [
          { src: ['js/vendor/*.js', '!js/vendor/jquery-1.9.1.min.js', '!js/vendor/modernizr-2.6.2.min.js'], dest: 'js/concVend.js' }
        ]
      }
    },

    uglify: {
      options: {
        banner: '<%= banner %>'
      },
      develop: {
        files: [
          { src: ['<%= concat.develop.files[0].dest %>'], dest: 'js/concDev.min.js' }
        ]
      },
      vendor: {
        files: [
          { src: ['<%= concat.vendor.files[0].dest %>'], dest: 'js/concVend.min.js' }
        ]
      }
    },

    removelogging: {
      dist: {
        files: [
          { src: ['js/concDev.min.js'], dest: 'js/concDev.min.js' },
          { src: ['js/concVend.min.js'], dest: 'js/concVend.min.js' },
          { src: ['js/concDev.js'], dest: 'js/concDev.js' },
          { src: ['js/concVend.js'], dest: 'js/concVend.js' }
        ]
      }
    },

    jshint: {
      files: ['gruntfile.js', 'js/develop/*.js'],
      options: {
        globals: {
          jQuery: true,
          console: true,
          module: true,
          document: true
        }
      }
    },

    cssmin: {
      compress: {
        options: {
          banner: '<%= banner %>'
        },
        files: [
          { src: ['css/main.css'], dest: 'css/main.min.css' }
        ]
      }
    },

    imagemin: {
      dynamic_mappings: {
        files: [
          {
            expand: true,
            cwd: 'img/',
            src: ['**/*.png', '**/*.jpg'],
            dest: 'img/',
            ext: '.png'
          }
        ]
      }
    },

    sass: {
      compressed: {
        files: {
          'css/main.css': 'css/develop/main.scss'
        },
        options: {
          outputStyle: 'compressed'
        }
      },

      nested: {
        files: {
          'css/main.css': 'css/develop/main.scss'
        },
        options: {
          sourcemap: true,
          outputStyle: 'nested'
        }
      }
    },

    rsync: {
      deploy: {
        src: "./",
        dest: '<%= connection.dest %>', // i.e. "var/www"
        host: '<%= connection.host %>', // i.e. "user@server.com"
        recursive: true,
        syncDest: false,
        exclude: ["/node_modules", ".*"]
      }
    },

    watch: {
      options: {
        livereload: true
      },
      html: {
        files: '*.html'
      },
      js: {
        files: ['js/develop/plugins.js', 'js/develop/main.js'],
        tasks: ['jshint', 'concat:develop']
      },
      css: {
        files: 'css/develop/main.scss',
        tasks: ['sass:nested']
      }
    }

  });

  // Load Plugins
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.loadNpmTasks('grunt-contrib-imagemin');
  grunt.loadNpmTasks("grunt-remove-logging");
  grunt.loadNpmTasks('grunt-sass');

  grunt.loadNpmTasks('grunt-rsync');


  // Task Lists
  grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'imagemin', 'sass:nested']);

  grunt.registerTask('server', ['watch']);
  grunt.registerTask('deploy', ['sass:compressed', 'rsync' ]);
};
module.exports=函数(grunt){
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
横幅:'/*!*/\n',
康卡特:{
选项:{
分隔符:'\n//新文件\n',
横幅:“”
},
发展:{
档案:[
{src:['js/develop/plugins.js','js/develop/main.js',dest:'js/concDev.js'}
]
},
供应商:{
档案:[
{src:['js/vendor/*.js','!js/vendor/jquery-1.9.1.min.js','!js/vendor/modernizer-2.6.2.min.js'],dest:'js/concVend.js']
]
}
},
丑陋的:{
选项:{
横幅:“”
},
发展:{
档案:[
{src:[''],dest:'js/concDev.min.js'}
]
},
供应商:{
档案:[
{src:[''],dest:'js/concVend.min.js'}
]
}
},
重新记录:{
地区:{
档案:[
{src:['js/concDev.min.js'],dest:'js/concDev.min.js'},
{src:['js/concVend.min.js'],dest:'js/concVend.min.js'},
{src:['js/concDev.js'],dest:'js/concDev.js'},
{src:['js/concVend.js'],dest:'js/concVend.js'}
]
}
},
jshint:{
文件:['grunfile.js','js/develop/*.js'],
选项:{
全球:{
jQuery:true,
安慰:是的,
模块:正确,
文件:正确
}
}
},
cssmin:{
压缩:{
选项:{
横幅:“”
},
档案:[
{src:['css/main.css'],dest:'css/main.min.css'}
]
}
},
imagemin:{
动态映射:{
档案:[
{
是的,
cwd:“img/”,
src:['***.png','***.jpg'],
目标:“img/”,
分机:'.png'
}
]
}
},
sass:{
压缩:{
档案:{
“css/main.css”:“css/develop/main.scss”
},
选项:{
outputStyle:“压缩”
}
},
嵌套的:{
档案:{
“css/main.css”:“css/develop/main.scss”
},
选项:{
sourcemap:true,
outputStyle:“嵌套”
}
}
},
rsync:{
部署:{
src:“./”,
目标:'',即“var/www”
主机:“”,//即user@server.com"
是的,
syncDest:false,
排除:[“/node_模块”,“*”]
}
},
观察:{
选项:{
利弗雷罗德:没错
},
html:{
文件:'*.html'
},
js:{
文件:['js/develope/plugins.js','js/develope/main.js'],
任务:['jshint','concat:develope']
},
css:{
文件:“css/develop/main.scss”,
任务:['sass:nested']
}
}
});
//加载插件
grunt.loadNpmTasks(“grunt-contrib-uglify”);
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks(“grunt-contrib-watch”);
grunt.loadNpmTasks(“grunt-contrib-concat”);
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-imagemin');
loadNpmTasks(“grunt删除日志”);
grunt.loadNpmTasks(“grunt-sass”);
grunt.loadNpmTasks('grunt-rsync');
//任务列表
registerTask('default',['jshint','concat','uglify','imagemin','sass:nested']);
registerTask('server',['watch']);
registerTask('deploy',['sass:compressed','rsync']);
};
顺便说一句,正如我所说的,我对grunt完全陌生,如果你发现我的代码中有其他不好的做法,请让我知道。同样,对于ftfront-end工作来说,很好的插件名称总是受欢迎的,我看到有很多,只有faminial和一些contrib插件

注意:为什么很多sass选项都不起作用,例如:noCache、LineNumber、debugInfo、outputStyle:“compact”、“expanded”(压缩、嵌套)


~ae

为了提供一个实际的答案,sass中还没有sourcemaps。他们正在阿尔法版本中工作。最初的问题引用了一条提交消息,该消息指出代码正在进行未来验证


截至2013年6月24日,sourcemaps在grunt contrib sass或grunt contrib compass中不可用。

仅作为实际答案,sourcemaps在sass中尚不可用。他们正在阿尔法版本中工作。最初的问题引用了一条提交消息,该消息指出代码正在进行未来验证

截至2013年6月24日,源地图在grunt contrib sass或grunt contrib compass中不可用。

截至今日(2013年7月10日):

如果您安装了sass的预版本

gem install sass --pre
和grunt contrib sass包,您的配置文件将允许生成sourcemaps

如果您使用指南针,请尝试使用sass任务配置块中的
compass:true
选项,或从今天(2013年10月7日)起使用
loadPath

如果您安装了sass的预版本

gem install sass --pre
和grunt contrib sass包,您的配置文件将允许生成sourcemaps


如果您使用compass,请尝试使用sass任务配置块中的
compass:true
选项或
loadPath
我可以使用以下命令使其正常工作:
*一个注意:地图文件没有被跟踪到任何地方,所以我没有意识到它是重写它,直到我删除了地图的版本,然后我注意到它正在写文件

module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        sass: {
            dist: {
                options: {
                    style: 'expanded',
                    debugInfo: true,
                    sourcemap: true
                }, 
                files: {
                    'styles/styles.css' : 'styles/sass/styles.scss'
                }
            },
        },
        watch: {
            css: {
                files: '**/*.scss',
                tasks: ['sass'],
                sourceComments: 'normal'
            }
        }
    });
    grunt.loadNpmTasks('grunt-contrib-sass');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.registerTask('default',['watch']);
}

我能够通过以下方式实现这一点:
*注意:地图文件在任何地方都没有被跟踪,所以我没有意识到它正在重写它
[...]

sass : {
    dist : {
        files : {
            'example.css' : 'example.scss'
        },
        options: {
             sourcemap: 'auto'
        }
    }
}

[...]