惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
B
Blog
博客园 - Franky
I
InfoQ
A
About on SuperTechFans
博客园_首页
L
LangChain Blog
量子位
腾讯CDC
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
美团技术团队
V
V2EX
Apple Machine Learning Research
Apple Machine Learning Research
雷峰网
雷峰网
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
G
Google Developers Blog
Last Week in AI
Last Week in AI

愆伏

vue feedback 指令开发 通过webpack对css压缩后所引起的重名问题 NPM 撤回已发布的版本 昆虫有趋光性吗 数组转成字符串(css 属性) 关于grid布局的一些思考 阿里云和腾讯云网站字体族对比 Vue组件抛事件和Function prop的差别 Vue 事件参数传递 Vue Data里面下划线命名无效并报错 使用sublime中的正则处理数据格式 通过nodejs创建目录与文件 macOS 下npm run dev 无法局域网访问 mac 下使用ssh访问非22端口的gitlab 世界是平的,在科学上网之后 使用sublime text3和Markdown来写博客 如果非要给一个标题,那就是2014年非工作总结 不专业呢,就别捣乱 对知乎大号怒撤事件的一点看法 拒绝SB思维 嘀嘀与快的的商业博弈 关于收藏夹功能的思考 你居然都不用微信 一个英语培训机构的外呼电话 智商是硬伤就无解了 扁鹊三兄弟 竖子不足与谋 美丽说、蘑菇街今天一定开了好几个小时的会 个人独立博客会死掉吗? iPad作画
vue项目中的less加入javascript报错
tortorse · 2018-12-25 · via 愆伏
1
inline JavaScript is not enabled. Is it set in your options ?

我在使用 iView 的自定义主题时出现了以上报错。

之前做 ui-nuclear-mobile 也发现过 Ant Design 有同样的 issue

众所周知 Ant Design 官方只有 React 的实现,而基于 vueiview 为什么也会有同样的错误,并且提示去 Antdgithub 找解决方案,你应该能懂。

解决方案有2个:

  1. less 降级到 2.x 版本
  2. 配置 less-loader,让其支持 inline-javascript

解决方案1,我验证过可行,社区里也无异议。

解决方案2,社区里常常这样说:

我明明配置了,为什么还是报错?

因为社区都是教你去配置 webpack :

1
2
3
4
5
6
7
8
9
module.exports = {
css: {
loaderOptions: {
less: {
javascriptEnabled: true
}
}
}
}

打开自己的 Vue 项目一看,瞬间懵逼,哪里配置 webpack ?

通过猜,可以找到 \build\webpack.base.conf.js,里面是这样的

1
2
3
4
5
6
7
8
9
10
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
}
...
]
}

这...没有 less

这里请注意 vueLoaderConfig,这玩意儿是来自于 /build/vue-loader.conf

打开 vue-loader.conf,发现里面是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
module.exports = {
loaders: utils.cssLoaders({
sourceMap: isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap,
extract: isProduction
}),
transformToRequire: {
video: 'src',
source: 'src',
img: 'src',
image: 'xlink:href'
}
}

还是没有 less 啊,请注意 utils.cssLoaders,这是来自于 /build/utils.js

这里面有一段:

1
2
3
4
5
6
7
8
9
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}

看一下 generateLoaders,发现其第一个参数是loader,第二个参数是 loaderOptions

看到这里,差不多明白了。稍微改动一下,增加一个 Option

1
2
3
4
5
6
7
8
9
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less', { javascriptEnabled: true }),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}

感觉 generateLoaders 有哪里不对。

loader 的名字居然是靠 loader + '-loader' 这样匹配的啊?

不管那么多了,总结一下:

Vue-cli 2.x 的版本下用 webpack 模板创建的项目,如果要在 less 里支持 inline-javascript,请修改 /build/utils.js 中的 cssLoadersreturn 部分。

虽然去改一个 utils 感觉很诡异, 但目前这是行之有效的方法