webpack学习

webpack学习笔记

温故webpack打包知识,忘记了就回头看看~ 根据学习视频学习整理,不为一一对应笔记,主要是根据对学习视频知识的梳理~
PS:上学习视频是基于webpack4的,我这边运行时基于webpack5的,不对的地方已经按照官方文档进行定义配置

初始化项目

环境要求:node+npm+webpack

  1. 初始化 npm 项目
npm init -y 
  1. 安装 webpack 和 webpack-cli:
npm install --save-dev webpack webpack-cli
  1. 创建项目
  • 建立webpack.config.js文件
  • 新建src文件夹,新建打包入口文件main.js
    webpack.config.js
const path = require('path');
module.exports = {
   
    //定义入口文件
    entry: './src/main.js',
  // 定义输出文件名
  output:{
   
        //定义输出名称
        filename:'bundle.js',
        //定义输出路径
       path: path.join(__dirname, "/dist"),
  }
}

main.js

alert('Hello world!')
  1. 定义打包命令package.json中script
  • 运行npm run build 则打包文件,默认根据webpack.config.js配置打包
  "scripts": {
   
    "build": "webpack"
  }
  1. 在根目录建立index.html文件,通过script标签引入打包的文件(后面通过插件htlm-webpack-plugin自动生成,则删除此文件,直接自动打包到dist文件夹中,并会自动引入打包.js文件)
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Webpack Plugin Demo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="dist/bundle.js"></script>
    </head>
  <body>
  </body>
</html>
  1. 安装server运行静态服务器

运行serve则打开当前目录,若有index.html默认运行index.html文件

npm install -g serve

运行

  • 当前开始时运行的自定义的index.html看效果,
serve .
  • 后续运行dist文件夹的自动生成的index.html看效果
serve dist

模块化标准规范

  • 浏览器:ES Module (主流的打包方案)
  • Nodejs: Commonjs(内置的环境系统)

Entry(入口):

Webpack 的打包过程从入口文件开始。入口文件可以是一个或多个,指定了应用程序的起点。

// webpack.config.js
module.exports = {
   
entry: './src/index.js'
};

Output(输出):

配置打包后的文件输出位置和文件名。

// webpack.config.js
module.exports = {
   
entry: './src/index.js',
output: {
   
filename: 'bundle.js',
path: __dirname + '/dist'
}
};

Loaders(加载器):

Loaders 让 Webpack 能够处理非 JavaScript 文件!!! 如 CSS、图片、字体等。通过配置 loaders,Webpack 可以将这些文件转换为可以被应用程序使用的模块。
具体每个loader作用以及更多loader查看官网,在这里配置最常见的loader

常见loader如下:

  • style-loader & css-loader
  • file-loader & url-loader
  • html-loader
  • babel-loader
  • 自制loader
  1. 安装依赖
npm i style-loader css-loader file-loader url-loader html-loader babel-loader
  1. 配置应用
const webpack = require('webpack');
const path = require("path");
module.exports = {
   
  mode: "none",
  entry: "./src/main.js",
  output: {
   
    filename: "[name]-[chunkhash:8]-bundle.js",
    path: path.join(__dirname, "/dist"),
  },
  module: {
   
    rules: [
      {
   
        test: /\.m?js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
   
          loader: "babel-loader",
          options: {
   
            //将ES Modules转换为CommonJS
            presets: [
              ['@babel/preset-env', {
   
                //默认是auto自动,写了commonjs是强制转换为commonjs,此时usedExports无法生效,即tree shaking无法生效
                modules: 'commonjs'
              }]
            ],
          }
        }
      },
      {
   
        test: /\.html$/,
        use: 'html-loader',
      },
      {
   
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader']
      },
      {
   
        test: /\.png$/,
        use: {
   
          loader: "url-loader",
          options: {
   
            name: '[name].[hash:8].[ext]',
            outputPath: 'images/',
            publicPath: 'images/',
            limit: 10 * 1024,
          }
        }
      }
    ]
  }
}

自制loader详解

自制markdown-loader为了解析引入.md文件

  1. 安装markdown-it(webpack5用这个解析.md文件)
npm i markdown-it
  1. 新建markdown-loader.js
const markdownIt = require('markdown-it')();

module.exports = function markdownLoader(source) {
   
    const html = markdownIt.render(source);
    return `module.exports = ${
     JSON.stringify(html)}`;
};
  1. 配置使用

const webpack = require('webpack');
const path = require("path");
module.exports = {
   
  mode: "none",
  entry: "./src/main.js",
  output: {
   
    filename: "[name]-[chunkhash:8]-bundle.js",
    path: path.join(__dirname, "/dist"),
  },
  module: {
   
    rules: [
      {
   
        test: /\.md$/,
        use: './markdown-loader'
      }
    ]
  }
}

style-loader 和 css-loader

这两个 Loaders 通常一起使用,用于处理 CSS 文件并将其引入到 JavaScript 模块中。

  • css-loader:

解析 CSS 文件中的 @import 和 url() 语法,并将 CSS 转换为 JavaScript 模块。
允许你在 JavaScript 文件中通过 import 或 require 引入 CSS 文件。

  • style-loader:

将 CSS 以

示例配置:

module.exports = {
   
  module: {
   
    rules: [
      {
   
        test: /\.css$/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值