用grunt-cmd-xxx构建seajs项目,require css的一个坑

今天又踩了一个坑,解决了总结一下:

有一段js代码require了css文件

require("./css/checkout.css");

为了把css文件也合并,做了以下配置:

transport: {
            options: {
                paths: [sourceDir],
                parsers: {
                    '.css': [style.css2jsParser]
                }
            },

grunt transport没问题,但是grunt concat时,抛出如下错误:

Warning: Cannot call method 'charAt' of undefined Use --force to continue.

跟踪源代码,看到grunt-cmd-concat/tasks/lib/script.js,在第53行:

if (v.charAt(0) === '.') {

这里v是undefined,在其上调用chatAt()方法,所以抛出了上面的错误

找了半天,后来偶然看到.build中间目录里,CSS文件处理了,但是js文件完全没有被transport过,所以遍历deps数组时,v就会变成undefined。问题是,为什么配置了CSSParser,js文件就不处理了呢?按理说完全没动过JSParser的配置

最后找到原因,如果配置了parsers参数,效果是覆盖,而不是追加,所以正确的配置文件应该这样写:

transport: {
            options: {
                paths: [sourceDir],
                parsers: {
                    '.js': [script.jsParser],
                    '.css': [style.css2jsParser]
                }
            },

你可能感兴趣的:(css,undefined,seajs,of,charAt,CSSParser)