安装webpack

全局安装

  1. yarn global add webpack@4 webpack-cli@3

局部安装(在需要的文件夹安装)

  1. 创建一个webpack-demo文件夹
  2. 初始化
  1. npm init -y
  1. 安装
  1. yarn add webpack@4 webpack-cli@3 --dev
  2. // 查看版本
  3. ./node_modules/.bin/webpack --version
  1. 配置 创建webpack.config.js文件夹

在文件夹里面放入

  1. module.exports = {
  2. // 给开发者看 development
  3. mode: 'development',
  4. };
  1. 调用webpack

相关配置:点击这里

  1. // 方法一
  2. ./node_modules/.bin/webpack webpack
  3. // 方法二
  4. npx webpack
  1. 打包后的文件在 文件夹dist 里面的 的main.js
  2. 在package.json里面添加下面代码,然后快捷 yarn build
  1. "build": "rm -rf dist && webpack",
  1. 生成HTML代码
  1. // 安装
  2. yarn add html-webpack-plugin --dev
  1. 生成CSS
  1. // 安装
  2. yarn add css-loader --dev
  3. // 安装
  4. yarn add style-loader --dev

配置dev-server

  1. // 安装
  2. yarn add webpack-dev-server --dev
  3. // 运行
  4. yarn start

注意他只会在缓存在里面 不会创建dist目录

  1. css抽成文件
  1. // 安装
  2. yarn add mini-css-extract-plugin --dev

在开发时用 yarn start 打包时 使用 yarn build

  1. 替换 package.json 里面的代码
  1. {
  2. "name": "webpack-demo",
  3. "version": "1.0.0",
  4. "description": "",
  5. "main": "index.js",
  6. "scripts": {
  7. "start": "webpack-dev-server",
  8. "build": "rm -rf dist && webpack --config webpack.config.prod.js ",
  9. "test": "echo \"Error: no test specified\" && exit 1"
  10. },
  11. "keywords": [],
  12. "author": "",
  13. "license": "ISC",
  14. "devDependencies": {
  15. "css-loader": "^5.1.2",
  16. "dart-sass": "^1.23.7",
  17. "file-loader": "^5.0.2",
  18. "html-webpack-plugin": "^3.2.0",
  19. "less": "^3.10.3",
  20. "less-loader": "^5.0.0",
  21. "mini-css-extract-plugin": "^1.3.9",
  22. "sass-loader": "^8.0.0",
  23. "style-loader": "^2.0.0",
  24. "stylus": "^0.54.7",
  25. "stylus-loader": "^3.0.2",
  26. "webpack": "^4.41.2",
  27. "webpack-cli": "^3.3.10",
  28. "webpack-dev-server": "^3.11.2"
  29. }
  30. }
  1. 替换 webpack.config.js 代码
  1. const HtmlWebpackPlugin = require("html-webpack-plugin");
  2. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  3. const path = require("path");
  4. const base = require('./webpack.config.base.js')
  5. module.exports = {
  6. // 将base里面的代码抄过来
  7. ...base,
  8. devtool: "inline-source-map",
  9. devServer: {
  10. contentBase: "./dist"
  11. },
  12. module: {
  13. rules: [
  14. ...base.module.rules,
  15. {
  16. test: /\.css$/i,
  17. use: ["style-loader", "css-loader"]
  18. }
  19. ]
  20. }
  21. };
  1. 创建 webpack.config.prod.js 并复制以下代码
  1. const HtmlWebpackPlugin = require("html-webpack-plugin");
  2. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  3. const path = require("path");
  4. const base = require('./webpack.config.base.js')
  5. module.exports = {
  6. ...base,
  7. mode: "production",
  8. plugins: [
  9. ...base.plugins,
  10. new MiniCssExtractPlugin({
  11. filename: '[name].[contenthash].css',
  12. chunkFilename: '[id].[contenthash].css',
  13. ignoreOrder: false, // Enable to remove warnings about conflicting order
  14. }),
  15. ],
  16. module: {
  17. rules: [
  18. ...base.module.rules,
  19. {
  20. test: /\.css$/i,
  21. use: [{
  22. loader: MiniCssExtractPlugin.loader,
  23. options: {
  24. publicPath: '../',
  25. },
  26. },
  27. 'css-loader',
  28. ],
  29. }
  30. ]
  31. }
  32. };
  1. 创建 webpack.config.base.js 并复制以下代码
  1. const HtmlWebpackPlugin = require("html-webpack-plugin");
  2. const path = require("path");
  3. module.exports = {
  4. entry: "./src/index.js",
  5. output: {
  6. filename: "index.[contenthash].js"
  7. },
  8. plugins: [
  9. new HtmlWebpackPlugin({
  10. title: "XDML - 写代码啦",
  11. template: "src/assets/index.html"
  12. })
  13. ],
  14. module: {
  15. rules: [{
  16. test: /\.(png|svg|jpg|gif)$/,
  17. use: ["file-loader"]
  18. },
  19. {
  20. test: /\.styl$/,
  21. loader: ["style-loader", "css-loader", "stylus-loader"]
  22. },
  23. {
  24. test: /\.less$/,
  25. loader: ["style-loader", "css-loader", "less-loader"]
  26. },
  27. {
  28. test: /\.scss$/i,
  29. use: [
  30. "style-loader",
  31. "css-loader",
  32. {
  33. loader: "sass-loader",
  34. options: {
  35. implementation: require("dart-sass")
  36. }
  37. }
  38. ]
  39. }
  40. ]
  41. }
  42. };

然后执行

  1. yarn install
  2. yarn init

创建一个src目录在里面放入index.js 或者其他的js,css文件。

html文件放入 src目录下的assets目录。里面必须有一个index.html

最后就完成啦

在开发的时候执行 yarn start 提供实时预览效果

在打包的时候执行 yarn build 将JS、CSS分离打包

webpack的作用包括哪些?

  • 将一个或者多个JS文件/CSS文件打包成对应文件
  • 压缩代码
  • 将高版本的JS转译文低版本的JS

loader 和 plugin的区别

loader就是加载器。

plugin就是一个插件来扩展webpack的功能的。

loader用来去load资源文件。例如用来加载js文件,将js文件加载成低版本浏览器可以支持的文件。也可以用来加载css文件将css文件变成页面上的style标签,或者其他处理。

plugin用来加强功能的 例如html-webpack-plugin插件用来生成一个html文件的。mini-css-extract-plugin用来抽取css代码,将多个css文件合并成一个css。

webpack引入scss

  1. yarn add sass-loader dart-sass --dev

这里安装的版本可能过高 一定要和上面的package.json里面的版本一致。

引入 less

  1. // 安装
  2. yarn add less-loader --dev
  3. yarn add less --dev

引入 stylus

  1. // 安装
  2. yarn add stylus-loader stylus --dev

引入 img

在index.js里面 import 需要的png 然后在获取要插入的盒子 最后引入图片

  1. const div = document.querySelector('#app')
  2. div.innerHTML = `
  3. <img src="${png}">
  4. `

懒加载

用impor引入一个js 然后 等于一个 promise 成功了就执行 js 错误了就报错

  1. const button = document.createElement('button')
  2. button.innerText = '懒加载'
  3. button.onclick = () => {
  4. const promise = import('./lazy.js')
  5. promise.then((module) => {
  6. const fn = module.default
  7. fn()
  8. }, () => {
  9. console.log('失败了');
  10. })
  11. }
  12. div.appendChild(button)