16

Webpack5 上手 – 淮城一只猫

 3 years ago
source link: https://iiong.com/get-started-with-webpack5/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Webpack5 上手 – 淮城一只猫
Webpack5 上手
Jaxson Wang / 2020-12-09 / 奇淫技巧 / 阅读量

之前很多项目都用到 Webpack 这个工具,毕竟目前前端领域上它所占的地位相当高,使用它可以减少大量的前端工作提高工作效率。不过最近俩年使用 Webpack4 的版本,虽然没有遇到太大的问题,不过官方在今年十月份正式推出 Webpack5 的大版本,翻阅下更新日志改动 API 地方还蛮多的,正好最近需要用到它所以尝试下新版本的脚手架工具。所以本文写得非常简单,做个索引备用。

说到底是它就是工具,不是那种 jQueryVue 等这些天天用得到的东西,很多 API 需要查阅才得知,然而查阅过程却很蛋疼,因为资料太多了,一时无法下手,所以耐着心搞好第一个脚手架。

我的环境是 macOS Big Sur 11.0.1 ,在此环境进行新建个符合现代化前端开发构建工具:

  • 支持 Babel 语法转换

  • 支持 SCSS 预处理器

  • 支持 POSTCSS 浏览器厂商前缀兼容

  • 支持 ESLint 语法检测

  • 热更新加载

我本机环境如下:

Last login: Thu Dec  3 11:09:13 on ttys001
jaxson@iMac:~ » node -v
v12.19.1
jaxson@iMac:~ » npm -v
6.14.8

新版本工具对 Node 要求高,建议安装最新的版本即可。

运行 webpack 5 的 Node.js 最低版本是 10.13.0 (LTS)

熟悉 Webpack 的同学完全可以 yarn init 来安装自己想要的东西,但对我半生不熟的可以用脚手架的命令来初始化:

mkdir webpack5-demo
webpack-cli init

如果没有全局安装 webpack-cli 可以执行下面命令:

mkdir webpack5-demo
npx webpack-cli init

然后根据终端返回的信息进行配置,配置完毕后在项目目录下新建个 config/webpack.dev.js 文件:

const path = require('path')

const resolve = dir => {
  return path.join(__dirname, dir)
}

module.exports = {
  mode: 'development',
  entry: {
    index: [
      './src/js/index.js',
    ]
  },
  output: {
    filename: 'index.js'
  },
  devtool: 'source-map',
  resolve: {
    alias: {
      '@': resolve('../src')
    }
  }
}
javascript

这样就形成最基础的开发环境配置文件,然后在项目的根目录下新建 index.html 文件里面引入上面输出的的脚本:

<script src="index.js"></script>

保存后在 package.json 里面添加字段:

"scripts": {
  "dev": "webpack serve --config config/webpack.dev.js"
}
javascript

然后在 src/js/index.js 填入:console.log('hello world'),完成之后在终端运行 yarn dev,在浏览器即可看到脚本输出的内容,就这样最简单的构建工具完成了。但功能支持上远远不够,还需要做额外的支持。

DevServer

针对 development 模式开启一个 http 服务,为了上面所提到的支持功能选择 webpack-dev-server 工具包作为服务:

yarn add webpack-dev-server -D

然后继续修改 config/webpack.dev.js 文件,在原来基础上添加一个字段:

devServer: {
  contentBase: resolve('../src/html'),
  host: '0.0.0.0',
  port: 65506,
  hot: true,
  open: false,
  clientLogLevel: 'silent'
},
javascript
  • contentBase :将 index.html 从根目录移动到 src/html 目录下是因为更好的管理
  • host : 主机地址
  • port :端口号
  • hot :热加载
  • open :服务加载打开网页
  • clientLogLevel :关闭无用日志

然后启动服务就会看到自己想看到效果

Babel

安装依赖:

yarn add babel-loader @babel/core @babel/preset-env webpack -D

config/webpack.dev.js 添加规则:

module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env']
        }
      }
    }
  ]
}
javascript

SASS/SCSS

安装依赖:

yarn add sass-loader sass css-loader style-loader -D

config/webpack.dev.js 添加规则:

entry: {
  index: [
    './src/js/index.js',
    './src/scss/index.scss'
  ]
},
module: {
  rules: [
    {
      test: /\.scss$/i,
      use: [
        // 将 JS 字符串生成为 style 节点
        'style-loader',
        // 将 CSS 转化成 CommonJS 模块
        'css-loader',
        // 将 Sass 编译成 CSS
        {
          loader: "sass-loader",
          options: {
            sourceMap: true,
          }
        }
      ],
    }
  ]
}
javascript

PostCSS

yarn add postcss-loader postcss autoprefixer -D

在上面规则修改

module: {
  rules: [
    {
      test: /\.scss$/i,
      use: [
        'style-loader',
        'css-loader',
        // => 添加
        'postcss-loader',
        {
          loader: "sass-loader",
          options: {
            sourceMap: true,
          }
        }
      ],
    }
  ]
}
javascript

项目目录下新建 postcss.config.js 来添加兼容规则:

module.exports = {
  plugins: [
    require('autoprefixer')
  ]
}
javascript

ESLint

安装依赖:

yarn add eslint-webpack-plugin eslint -D

config/webpack.dev.js 添加插件:

const ESLintPlugin = require('eslint-webpack-plugin')
const esLintPlugin = new ESLintPlugin({
  emitWarning: true,
  emitError: true,
  failOnWarning: false,
  failOnError: false
})

module.exports = {
  plugins: [
    esLintPlugin
  ]
}
javascript

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK