webpack之基础篇(一):webpack的基础认识

webpack系列说明

已完成:

基础篇

  1. webpack之基础篇(一):webpack的基础认识
  2. webpack之基础篇(二):前端基本开发环境的搭建
  3. webpack之基础篇(三):配置loader和plugin
  4. webpack之基础篇(四):webpack-dev-server浅析
  5. webpack之基础篇(五):配置开发、测试、生产环境

优化篇

  1. webpack之优化篇(一):优化静态资源
  2. webpack之优化篇(二):优化配置提高构建速度
  3. webpack之优化篇(三):http压缩之Gzip
  4. webpack之优化篇(四):webpack DllPlugin配置的代替方案hard-source-webpack-plugin

原理篇

  1. webpack之原理篇(二):hash、chunkhash、contenthash的认

编写中:

  1. webpack之原理篇(一):webpack的工作流程和原理
  2. webpack之原理篇(三):webpack-dev-server原理
  3. webpack之原理篇(四):手写loader
  4. webpack之原理篇(五):手写plugin

webpack(一):webpack的基础认识

webpack 本质上是一个打包工具,它会根据代码的内容解析模块依赖,帮助我们把多个模块的代码打包。借用 webpack 官网的图片:

webpack as a bundler

loader

loader 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。(webpack默认只识别js结尾的文件,当遇到其他格式的文件后,webpack并不知道如何去处理。这时候就要用loader了)

举个例子,在没有添加额外插件的情况下,webpack 会默认把所有依赖打包成 js 文件,如果入口文件依赖一个 .hbs 的模板文件以及一个 .css 的样式文件,那么我们需要 handlebars-loader 来处理 .hbs 文件,需要 css-loader 来处理 .css 文件(这里其实还需要 style-loader),最终把不同格式的文件都解析成 js 代码,以便打包后在浏览器中运行。

loader 模块需要导出为一个函数,并且使用 Node.js 兼容的 JavaScript 编写。

plugins

插件是 webpack 的支柱功能。webpack 自身也是构建于,你在 webpack 配置中用到的相同的插件系统之上!

插件目的在于解决 loader 无法实现的其他事。

webpack 插件是一个具有 apply 属性的 JavaScript 对象。apply 属性会被 webpack compiler 调用,并且 compiler 对象可在整个编译生命周期访问。

ConsoleLogOnBuildWebpackPlugin.js

const pluginName = 'ConsoleLogOnBuildWebpackPlugin';

class ConsoleLogOnBuildWebpackPlugin {
    apply(compiler) {
        compiler.hooks.run.tap(pluginName, compilation => {
            console.log("webpack 构建过程开始!");
        });
    }
}

简单的webpack配置

webpack 运行时默认读取项目下的 webpack.config.js 文件作为配置。

所以我们在项目中创建一个 webpack.config.js 文件:

const path = require('path')
const UglifyPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
  entry: './src/index.js',

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

  module: {
    rules: [
      {
        test: /\.js$/,
        include: [
          path.resolve(__dirname, 'src')
        ],
        use: 'babel-loader',
      },
    ],
  },

  // 代码模块路径解析的配置
  resolve: {
    modules: [
      "node_modules",
      path.resolve(__dirname, 'src')
    ],

    extensions: [".wasm", ".mjs", ".js", ".json", ".jsx"],
  },

  plugins: [
    // 使用 uglifyjs-webpack-plugin 来压缩 JS 代码
    new UglifyPlugin()
  ]
}

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值