Fix missing semicolon on imported json module
Fix Missing Semicolon on require('./en.json') module
webpack / vue config file:
module: { rules: [ // loader for js file { test: /\.js/, use: [ { loader: 'thread-loader' }, { loader: 'cache-loader' }, { loader: 'babel-loader', options: { presets: ['@babel/preset-env'], plugins: [ '@babel/plugin-transform-modules-umd', '@babel/plugin-transform-runtime', '@babel/plugin-transform-regenerator', '@babel/plugin-transform-object-assign' ] } }, { loader: 'eslint-loader', options: { fix: true } } ] },
quick fix error
// modify test rule: test: /\.js/ ====> test: /\.js$/
why ?
/\.js/.test('a.json') // true /\.js$/.test('a.json') // false // error will fix
在js代码中,require()引入了json文件,突然就报错: eslint error: Missing semicolon.
json的内容是非常普通的数据,就是引入了多语言、国际化的json文件
const i18n = new VueI18n({ messages: { zh: require("./zh.json"), en: require("./en.json") } });
看到报错后,感觉到莫名其妙,json文件为什么会要求加分号呢?
查了10分钟,才发现是 webpack loader 的配置出错了。
json文件使用了 js loader 来处理,肯定会报错的啊,json的语法跟js完全是不同的,使用 js loader来处理json肯定是出问题
公司的vue项目的脚手架是别的同事做的,出现了这种坑人的配置。vue 官方脚手架应该是没有此类问题的。
问题总算是解决了。
// 错误消息 en.json Module Error (from ./node_modules/thread-loader/dist/cjs.js): 2:11 error Parsing error: Missing semicolon.
参考 https://github.com/eslint/eslint/discussions/15801 https://stackoverflow.com/questions/61131010/typescript-complains-about-missing-semicolon-on-imported-json-module