vue项目中的less加入javascript报错
1 | inline JavaScript is not enabled. Is it set in your options ? |
我在使用 iView 的自定义主题时出现了以上报错。
之前做 ui-nuclear-mobile 也发现过 Ant Design 有同样的 issue。
众所周知 Ant Design 官方只有 React 的实现,而基于 vue 的 iview 为什么也会有同样的错误,并且提示去 Antd 的 github 找解决方案,你应该能懂。
解决方案有2个:
- 把
less降级到2.x版本 - 配置
less-loader,让其支持inline-javascript
解决方案1,我验证过可行,社区里也无异议。
解决方案2,社区里常常这样说:
我明明配置了,为什么还是报错?
因为社区都是教你去配置 webpack :
1 | module.exports = { |
打开自己的 Vue 项目一看,瞬间懵逼,哪里配置 webpack ?
通过猜,可以找到 \build\webpack.base.conf.js,里面是这样的
1 | module: { |
这...没有 less 啊
这里请注意 vueLoaderConfig,这玩意儿是来自于 /build/vue-loader.conf 的
打开 vue-loader.conf,发现里面是:
1 | module.exports = { |
还是没有 less 啊,请注意 utils.cssLoaders,这是来自于 /build/utils.js 的
这里面有一段:
1 | return { |
看一下 generateLoaders,发现其第一个参数是loader,第二个参数是 loaderOptions
看到这里,差不多明白了。稍微改动一下,增加一个 Option
1 | return { |
感觉 generateLoaders 有哪里不对。
loader 的名字居然是靠 loader + '-loader' 这样匹配的啊?
不管那么多了,总结一下:
在 Vue-cli 2.x 的版本下用 webpack 模板创建的项目,如果要在 less 里支持 inline-javascript,请修改 /build/utils.js 中的 cssLoaders 的 return 部分。
虽然去改一个
utils感觉很诡异, 但目前这是行之有效的方法