前端工程化起步--webpack指北

168 阅读2分钟

webpack指北

什么是webpack

引用官方的一句话:

webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具

简单来说,webpack就是一个可以把项目文件打包起来的工具,打包的含义体现在将多个文件打包成一个大文件。当然,还有各种功能丰富的插件丰富webpack的功能,webpack主要用来如下事情:

  1. 将多个同类型文件汇聚成一个文件,如js、css,减少文件请求次数
  2. js代码编译,将新语法编译成旧语法,如ES6转ES5,提升兼容性
  3. 代码压缩,缩小体积

使用前准备

准备环境:nodejs以及npm包管理器 安装:推荐官方教程 在项目根目录中安装

npm install webpack webpack-cli --save-dev 注:webpack版本为5以上。

开始学习

打包构建命令

在package.json文件中,scripts下增加

"build": "webpack",

之后每次使用如下指令即可进行打包构建

npm run build

打包编译JS

webpack自带打包js的功能,不需要安装任何插件。 在webpack.config.js的module.exports中,增加如下内容即可

module.exports = {
 mode:'development'// 打包模式 production 生产模式(代码压缩),development 开发模式
 entry'./src/index.js'//打包入口目录
 output: {
        filename'main.js',  // 输出js文件名
        cleantrue// 每次打包先清空disk目录
        },
}

文件名哈希后缀

如果每次构建完的文件名都一样,比如style.css,main.js,由于浏览器会自动缓存文件,会导致浏览器复用上一次加载的文件,导致网页内容不能及时更新。 于是webpack提供了这个功能,它可以以文件内容生成的哈希作为文件名后缀,保证每次更新了js或css内容后打包出的文件名都不一样,防止浏览器使用缓存内容。 使用方法: 修改webpack.config.js中output下的filename

filename'main[contenthash].js',  // 输出js文件名(哈希后缀)

自动生成index.html

引入sass less stylus

  1. sass 加载器 安装加载器(node sass已过时,使用dart sass)

npm install sass-loader dart-sass --save-dev webpack.config.js中的rules增加以下规则

  rules: [
          {
            test/\.scss$/i,
            use: ["style-loader",
              "css-loader",
              {
                loader'sass-loader',
                options: {
                  implementation:require('dart-sass')
                }
              }
            ],
          },
        ],
  1. less加载器 安装加载器

npm install less-loader less --save-dev

webpack.config.js中的rules增加以下规则

        {
          test/\.less$/i,
          use: ["style-loader""css-loader""less-loader"],
        },

3.stylus加载器 安装加载器

npm install stylus-loader stylus --save-dev

webpack.config.js中的rules增加以下规则

        {
          test/\.styl$/i,
          use: ["style-loader""css-loader""stylus-loader"],
        },

使用file-loader加载图片

安装加载器

npm install file-loader --save-dev

webpack.config.js中的rules增加以下规则

       {
          test/\.(png|svg|jpg|gif)$/i,
          use: [ "file-loader"],
        },

实现懒加载

使用import(),会返回一个promise对象,在then方法成功回调中执行脚本。

   const p = import('./lazy')
    p.then(
        (moudle) => { moudle.default() },
        ()=>{console.log('懒加载错误')}
    )