代码之家  ›  专栏  ›  技术社区  ›  Finesse

如何根据入口应用不同的装载机?

  •  1
  • Finesse  · 技术社区  · 7 年前

    我有一个包含两个条目的网页包配置:

    const path = require('path');
    
    module.exports = {
      entry: {
        public: './src/public.js',
        admin: './src/adminPanel.js'
      },
      module: {
        rules: [
          {
            test: /\.js$/,
            exclude: /node_modules/,
            use: [{
              loader: 'babel-loader',
              options: {
                presets: [
                  ['@babel/preset-env', {
                    targets: {
                      browsers: ['last 5 years']
                    }
                  }]
                ]
              }
            }]
          }
        ]
      },
      output: {
        path: path.resolve(__dirname, 'dist'),
        filename: '[name].js'
      }
    };
    

    它生成两个文件:一个用于公共页面的脚本和一个用于管理面板的脚本。这些条目导入另一个js文件,包括一些共享文件。我需要公共脚本来支持许多浏览器,而管理面板脚本只支持最新的chrome。

    我想通过使用不同的 browsers 根据条目进行设置,以便如果在公共条目中使用js文件,则使用一个设置加载该文件;如果在管理条目中使用文件,则使用其他设置加载该文件。如何在webpack 4中实现?

    我知道我可以通过 exporting 2 Webpack configurations 但我想知道如何使用不同的加载程序或根据条目文件调整加载程序选项。

    0 回复  |  直到 7 年前
        1
  •  1
  •   axm__    7 年前

    我需要公共脚本来支持许多浏览器,而管理面板脚本只支持最新的chrome。我想通过根据条目使用不同的浏览器设置来实现。

    babel 支持每个目录的多个配置(递归地找到 巴别塔 配置文件高达 package.json 找到:

    babel通过 从“文件名”开始搜索目录结构 正在编译(受以下警告限制)。这可能很强大 因为它允许您为 包的子部分。 资料来源: babel docs

    目前您已将 巴别塔 在项目范围内应用的网页包配置中的配置。你能做的就是把 巴别塔 从你的网页包配置,放置你的 adminPanel.js public.js 在各自的目录中 .babelrc (或其他babel配置)具有不同目标的文件 @babel/presets-env 是的。

    .
    ├── src
    |   ├── admin
    |   |   ├── adminPanel.js
    |   |   ├── .babelrc
    |   |
    |   ├── public
    |   |   ├── public.js
    |   |   ├── .babelrc
    |
    ├── package.json
    

    你的 ./src/admin/.babelrc 可能看起来像:

    {
        "presets": [["@babel/preset-env", {
            "targets": "chrome 70"
        }]]
    }
    

    还有你的 ./src/public/.babelrc 以下内容:

    {
        "presets": [["@babel/preset-env", {
            "targets": "last 5 years"
        }]]
    }
    

    我刚刚用下面两个代码尝试过 ./src/admin/adminPanel.js ./src/public/public.js

    [1, 2, 3].map(num => `number ${num}`)
    
    let [x, y, z] = [2, 4, 6]
    

    哪个 webpack 巴别塔 已经转变成

    // ./dist/admin.js
    [1, 2, 3].map(num => `number ${num}`);
    let [x, y, z] = [2, 4, 6];
    

    // ./dist/public.js
    [1, 2, 3].map(function (num) {
      return "number ".concat(num);
    });
    var x = 2,
        y = 4,
        z = 6;
    

    希望有帮助。