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