【问题标题】:Combine, Minify, and convert to ES5 with WebPack and Babel使用 WebPack 和 Babel 组合、缩小并转换为 ES5
【发布时间】:2020-04-27 18:27:44
【问题描述】:

我有一个完美的项目并且是用 TS 编写的,我必须将它转换为纯 JS 并且它大部分都可以工作。我苦苦挣扎的问题是在文件合并和缩小后删除默认的 WebPack 加载器,WebPack 包含一个加载器到最终输出,即使我不需要加载器,因为所有文件都合并到一个大文件中。

+ filea.js
+ fileb.js
+ filec.js
+ filed.js
-> output bundle.js

我已经阅读了一些建议手动创建配置文件的文章/帖子,该文件提供将组合和缩小的每个文件的名称,这可能工作正常,但问题是我正在处理的项目被分解为小块(模块),这样 WebPack 之类的工具就可以足够智能,并且知道何时应将文件作为依赖项添加到最终输出中。

我知道我们可以合并和缩小多个单独的 JS 文件,但在导出单个文件时,使用 TS 似乎任务很简单,但在原版 JS 世界中,关于该主题的信息很少或根本没有。

【问题讨论】:

    标签: javascript typescript webpack


    【解决方案1】:

    我有些不明白,你想要一个大文件还是小的单个模块(块)?

    小模块示例:

    module.exports = {  
      entry: {    
        app: './src/app.js',
        admin: './src/admin.js',
        contact: './src/contact.js'  
      }
    };
    

    另一种方法是一个主模块,它包含所有较小的模块。

    module.exports = {  
      entry: {    
        app: './src/app.js'  
      }
    };
    

    您还可以使用延迟加载之类的方法。然后模块(块)将仅在需要时动态加载。 lazy-loading

    这是一个使用多个条目webpack-boilerplate的示例。

    【讨论】:

    • 感谢@Grzegorz T,我已经更新了我的帖子,以澄清更多关于正在添加但不需要的 WebPack 加载器的问题。
    • 最好的解决方案是当你展示 webpack 并告诉你安装了哪个版本。我有一种奇怪的感觉,您使用的是 CommonsChunkPlugin 而不是 SplitChunksPlugin。看看这个webpack-remove-webpackbootstrap-code 和这个optimizationruntimechunk
    • 我将其更新为“webpack”:“^5.0.0-beta.11”,但这破坏了构建,因此降级为“webpack”:“^4.41.5”并关注帖子你建议(我昨天发现它,我以为我遵循了它,但我错了。事情似乎奏效了!我会再做一次检查,如果它有效,我会将其标记为已接受:)。
    • 不幸的是,webpack 5 还没有进入生产版本,许多插件不适应它。
    • 对,对不起,我的意思是说我更新到 5 beta 知道风险,只是为了尝试一下。
    【解决方案2】:

    听起来您有一个包含多个 JS 文件的项目,并且您想使用 webpack 将所有这些文件打包并缩小结果。

    Webpack 就是为此而构建的。

    您需要在 package.json 中添加一个构建步骤,如下所示:

    "scripts": {
      "build": "webpack --config prod.config.js"
    }
    

    然后,您需要创建一个带有 module.exports 块的 webpack.config.js,该块具有要包含在项目中的入口点和规则。以下应该是可以帮助您入门的最小设置:

    const path = require('path');
    
    module.exports = {
      entry: "./your/path/to/src",
      output: {
        path: path.resolve(__dirname, "dist"),
        filename: "bundle.js"
      },
      module: {},
      plugins: [
        new MinifyPlugin(minifyOpts, pluginOpts)
      ]
    }
    
    You can add modules that perform additional code transpilation for files that matcha a certain regex. You can also use a plugin to perform minification such as babel-minify-webpack-plugin as documented here https://webpack.js.org/plugins/babel-minify-webpack-plugin/. (Note you will need to add this dependency.)
    
    The full webpack configuration can be found here: https://webpack.js.org/configuration/
    

    【讨论】:

    • 感谢@Jeff Tsui,我更新了帖子以反映设置不是问题,而是 WebPack 想要包含加载器的事实,即使单个最终输出不会有外部依赖。如果您查看最终输出的来源,您会在前 100 行 /******/ (function(modules) { // webpackBootstrap 中看到类似的内容,我不需要。
    • 我安装了babel-minify-webpack-plugin,但是你的webpack配置失败了,因为你错过了babel-minify-webpack-plugin的插件。
    猜你喜欢
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2021-12-18
    • 2020-05-29
    • 1970-01-01
    相关资源
    最近更新 更多