今天又踩了一个坑,解决了总结一下:
有一段js代码require了css文件
require("./css/checkout.css");
transport: { options: { paths: [sourceDir], parsers: { '.css': [style.css2jsParser] } },
Warning: Cannot call method 'charAt' of undefined Use --force to continue.
跟踪源代码,看到grunt-cmd-concat/tasks/lib/script.js,在第53行:
if (v.charAt(0) === '.') {
找了半天,后来偶然看到.build中间目录里,CSS文件处理了,但是js文件完全没有被transport过,所以遍历deps数组时,v就会变成undefined。问题是,为什么配置了CSSParser,js文件就不处理了呢?按理说完全没动过JSParser的配置
最后找到原因,如果配置了parsers参数,效果是覆盖,而不是追加,所以正确的配置文件应该这样写:
transport: { options: { paths: [sourceDir], parsers: { '.js': [script.jsParser], '.css': [style.css2jsParser] } },