1
wankeda
2026-03-02 600f659aa5cbfc0cca52d883f4299cbb8dd66dcd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// vue.config.js - 适配 Webpack 4 的版本
const path = require('path');
 
module.exports = {
  productionSourceMap: false,
  lintOnSave: false,
  
  // 转译这些包
  transpileDependencies: [
    'vue-router',
    'vue-draggable-next',
    'vuex',
    'element-plus'
  ],
  
  devServer: {
    port: 8080,
    overlay: false,
    hot: true
  },
  
  css: {
    sourceMap: true
  },
  
  configureWebpack: {
    module: {
      rules: [
        // 处理 .mjs 文件 - 简化版本,移除 fullySpecified
        {
          test: /\.mjs$/,
          include: /node_modules/,
          type: 'javascript/auto'
        },
        {
          test: /\.s[ac]ss$/,
          use: ['sass-loader']
        }
      ]
    },
    resolve: {
      extensions: ['.js', '.vue', '.json', '.mjs'],
      // Webpack 4 不支持 fullySpecified,移除或改为其他方式
      mainFields: ['module', 'main']  // 优先使用 ES 模块
    }
  },
  
  chainWebpack: (config) => {
    config.plugins.delete('prefetch');
    config.plugin('html').tap((args) => {
      args[0].title = 'WMS';
      return args;
    });
    
    // ========== 修复 Webpack 4 兼容性 ==========
    
    // 1. 删除有问题的规则(如果存在)
    config.module.rules.delete('mjs');
    
    // 2. 创建简化的 .mjs 处理规则
    config.module
      .rule('mjs')
      .test(/\.mjs$/)
      .include
        .add(/node_modules\/vue-router/)
        .add(/node_modules\/vue-draggable-next/)
        .add(/node_modules\/element-plus/)
        .end()
      .type('javascript/auto');
    
    // 3. 配置 JS 文件处理
    config.module
      .rule('js')
      .test(/\.js$/)
      .include
        .add(path.resolve(__dirname, 'src'))
        .add(/node_modules\/vue-router/)
        .add(/node_modules\/vue-draggable-next/)
        .add(/node_modules\/element-plus/)
        .add(/node_modules\/vuex/)
        .end()
      .use('babel-loader')
        .loader('babel-loader')
        .options({
          cacheDirectory: true,
          presets: [
            ['@babel/preset-env', {
              targets: {
                browsers: ['> 1%', 'last 2 versions', 'not dead'],
                node: '16.0.0'
              },
              modules: 'commonjs'  // Webpack 4 需要 commonjs
            }]
          ],
          plugins: [
            // 处理可选链操作符
            '@babel/plugin-proposal-optional-chaining',
            // 处理空值合并操作符
            '@babel/plugin-proposal-nullish-coalescing-operator'
          ]
        });
  }
};