当运行jshint来验证JS代码时,我经常会遇到像
这样的错误line 264, col 11, 'Cookies' is not defined.
Cookie来自
//= require js.cookie
编译为Rails资产管道的一部分,因此JSHint不知道它。
有没有办法设置它,以便JSHint在一个包含所有依赖项的文件上运行?还是有其他选择吗?
答案 0 :(得分:1)
您可以考虑使用globals选项使jshint知道共享全局变量。
如果以上证明太繁琐,那么在通过链轮运行文件后运行jshint - 即。运行rake assets:precompile
,然后在public/assets
生成的文件上运行jshint。
但我能推荐的最好的行动方案是不同的:
您应该考虑使用适当的模块系统,而不是使用sprockets进行javascript依赖关系管理。这将缓解共享全局变量的根本问题(这被广泛认为是糟糕的编程实践)。
虽然社区已经multiple module systems提出了不同程度的社区接受度 - 但现在最好的选择是拥抱ES6 modules standard。最终有一个标准化的模块化方法是很好的。我最近写了一篇关于将ES6模块与rails集成的简短guide。
简而言之,ES6模块标准是今天组织javascript的最佳选择,而不是像AMD,CommonJS或Sprockets指令这样的解决方案,这些解决方案是在没有模块化JavaScript的标准化解决方案可用的时代开发的。