我的网站项目有一些JavaScript库依赖项,我使用gulp-concat
中的gulpfile.js
插件将它们捆绑为一个库而不是单独包含它们:
gulp.src(['src/js/angular.min.js',
'src/js/angular-route.min.js',
'src/js/angular-sanitize.min.js',
'src/js/domador.min.js',
'src/js/megamark.min.js',
'src/js/woofmark.min.js'])
.pipe(concat('libs.js'))
.pipe(gulp.dest('dist/'));
添加domador
,megamark
和woofmark
库后,系统引入了一个问题。
虽然这些库在HTML中单独引用时工作得非常好,但是捆绑它们会在我的libs.js
中引入一些非法字符,从而打破Chrome:
未捕获的SyntaxError:意外的标记ILLEGAL
开发工具向我显示,在megamark.min.js
完成和woofmark.min.js
开始之间确实存在三个意外字符:
但是!当我在Visual Studio中查看libs.js
时:
混合中似乎存在某种“隐藏”字符,这些字符会成为Chrome的“未隐藏”并杀死该脚本。我不明白为什么他们在那里或者为什么我试图解决的事情都没有起作用......
我尝试过:
woofmark.min.js
以外的所有内容并单独包含该内容。是的,这有效,但我想将它们全部捆绑(我想了解发生了什么)woofmark.min.js
中的第一个关键字中途退格,超过必要的次数,然后重新输入必要的字符。没效果。megamark.min.js
的最后几个字符进行类似的努力。没效果。非常感谢任何见解!
答案 0 :(得分:0)
感谢评论中 vp_arth 提供的信息,我找到了解决方案。
似乎woofmark.min.js
文件被编码为" UTF-8带有签名",这是另一种说法,它具有生成非法字符的隐形BOM标记。
当IIS单独发送时,它正在被转换,但是当在一个包中连接时,标记被保留在文件的中间,从而创建了非法令牌。
要修复,我在Visual Studio中使用不同的编码重新保存文件:
然后,在重新运行gulp任务后,完整捆绑的lib.js
可以正常运行。