美文网首页webpack
再撸一遍webpack

再撸一遍webpack

作者: lmmy123 | 来源:发表于2019-06-27 19:31 被阅读0次

Webpack

核心概念
  • 入口(entry)

    • 单入口 entry: './src/main.js'

      如果传入的是文件路径数组,将创建多个主入口,导出一个‘chuck’

    • 多入口

      entry: {
          app: './src/app.js',
          vendors: './src/vendor.js
      }
      

      应用场景:

      分离app和第三方库入口

      多页面应用

  • 出口 (output)

    output: {
        path: path.resolve(__dirname, 'distlm'),
        filename: 'my.bundle.js'
    }
    

    多入口页面出口配置

    entry: {
        app: './src/app.js',
        search: './src/search.js'
    },
    output: {
      path: path.resolve(__dirname, 'distlm'),
        filename: '[name].js'
    }
    
    
  • loader 可以让webpack取处理非js文件

    module: {
        rules: [
          { 
              test:/\.txt$/, 
              use: 'raw-loader'
          },
           {
             test: /\.tsx?$/,
             exclude: /node_modules/,
             use: [
              'babel-loader',
              {
                loader: 'ts-loader',
                options: {
                  appendTsSuffixTo: [/\.vue$/],
                }
              },
            ]
          },
        ]
      }
    
  • 插件(plugins)

    webpack插件是一个具有apply属性的javascript对象

  • 模式(mode)

​ 可选值:developmemt / production, 用来启用相应模式下的webpack内置的优化

mainfest

当编译器(compiler)开始执行,解析和映射应用程序时,它会保留所有模块的详细要点,这个数据集合称为‘manifest’

构建目标(targets)

Web pack.config.js

module.exports = {
    target: 'node' //使用 node webpack 会编译为用于「类 Node.js」环境
}
模块热替换(hot module replacement)HRM

Webpack 内置的插件

只用于开发模式

const webpack = require('webpack')
devServer: {
      contentBase: './dist',
+     hot: true
    },
    plugins: [
      new CleanWebpackPlugin(['dist']),
      new HtmlWebpackPlugin({
        title: 'Hot Module Replacement'
      }),
+     new webpack.HotModuleReplacementPlugin()
    ],
tree shaking

【摇树优化】移除js上下文中未引用代码(dead-code)

// webpack.config.js
mode: 'production' // 可以达到tree shaking 效果

生产环境构建

将生产环境和开发环境分别做配置,但保留一个通用的配置,通过webpack-merge合并配置

指定环境

webpack 内置的 DefinePlugin插件 指定系统环境变量

 new webpack.DefinePlugin({
    'process.env.NODE_ENV': JSON.stringify('production')
 })
// process.env.NODE_ENV 在src/ 目录下都可以直接访问
split CSS

ExtractTextPlugin 将CSS文件分离成单独文件

已废弃,使用mini-css-extract-plugin替代

代码分离

webpack-bundle-analyzer 打包分析插件

  • 入口起点配置

    使用entry配置

  • CommonsChunkPlugin去重和分离chunk

    const webpack = require('webpack');
    plugins: [
        new webpack.optimize.CommonsChunkPlugin({
           name: 'common' // 指定公共 bundle 的名称。
       })
    ]
    

    4.0已废弃commonsChunkPlugin,使用optimization.splitChunks替代

    optimization: {
            // 合并相同的包, 放到vendors
            splitChunks: {
                chunks: 'all',
            }
        },
    
  • 动态导入,懒加载

    output: {
        chunkFilename: '[name].bundle.js', // 决定非入口chunk的名称
        ...
    }
    

    使用reuqire() 或import() 动态引入组件

    const PurchaseTask = () => import ( /* webpackChunkName: "dashboard.task" */ '@/views/Dashboard/TaskList/PurchaseTask/index.js' ) 
    // 会打包出 dashboard.task.c442502cdaa6eaa95f2f.js
    

相关文章

  • 再撸一遍webpack

    Webpack 核心概念 入口(entry)单入口 entry: './src/main.js'如果传入的是文件...

  • webpack高手秘籍(六)

    前言 前面我们写了几篇文章用来介绍webpack源码,跟着官网结合demo把整个webpack配置撸了一遍: we...

  • webpack高手秘籍(五)

    前言 前面我们写了几篇文章用来介绍webpack源码,跟着官网结合demo把整个webpack配置撸了一遍: we...

  • webpack高手秘籍(四)

    前言 我们继续前面的内容,把webpack剩下的配置项撸一遍,推荐大家先看一下前面的文章: webpack源码解析...

  • 今天练懵了

    撸铁有瘾,特别大腿侧面能隐约看出肌肉线条时,恨不能马上奔去健身房,再撸一遍!这种正反馈让人欲罢不能。 于是,默默决...

  • webpack 常用插件及用途

    学习 webpack 极其推荐跟着这个教程走一遍 https://doc.webpack-china.org/gu...

  • webpack高手秘籍(一)

    前言 前面写了一篇文章webpack源码解析一梳理了一遍webpack的编译过程,今天我们结合demo来过一遍we...

  • Vue.js 源码学习笔记

    放弃指南 看了挺多源码分析 打算自己撸一遍源码。 希望加深下理解 也更好的学习。 用于自己以后再阅读理解。 希望自...

  • 基于vue的cnode社区

    来由 最近撸了一遍vue文档,顺带vue-router,vue-cli,vuex都撸了一遍,听大佬说可以用cnod...

  • 打包工具webpack4

    webpack真是个神坑,吐槽不说了,直接开撸webpack4的号称可以零配置使用 零配置使用 创建文件夹然后进入...

网友评论

    本文标题:再撸一遍webpack

    本文链接:https://www.haomeiwen.com/subject/xxrdcctx.html