1. 初始化项目
    1. # npm init
    2. package name: 你的项目名字叫啥
    3. version: 版本号
    4. description: 对项目的描述
    5. entry point: 项目的入口文件(一般你要用那个js文件作为node服务,就填写那个文件)
    6. test command: 项目启动的时候要用什么命令来执行脚本文件(默认为node app.js
    7. git repository: 如果你要将项目上传到git中的话,那么就需要填写git的仓库地址(这里就不写地址了)
    8. keywirds 项目关键字(我也不知道有啥用,所以我就不写了)
    9. author: 作者的名字(也就是你叫啥名字)
    10. license: 发行项目需要的证书(这里也就自己玩玩,就不写了)
    11. # 可以一路回车,或者直接npm init -y即可
  • 执行完成后会在项目根路径下生成package.json文件
  1. 全局安装webpack和webpack-cli

npm install webpack webpack-cli -g

  1. 本地项目安装webpack和webpack-cli的开发依赖

npm install webpack webpack-cli -D

  • 执行完成后会在项目根路径下创建node_modules文件夹和package-lock.json文件

    二、编写测试代码,打包资源

    1. 目录结构

    image.png

    2. 编写测试内容

    1. # index.html
    2. <!DOCTYPE html>
    3. <html lang="en">
    4. <head>
    5. <meta charset="UTF-8">
    6. <title>Title</title>
    7. <!-- 引入打包后资源 -->
    8. <script src="../dist/main.js"></script>
    9. </head>
    10. <body>
    11. <h1 id="title">hello world</h1>
    12. </body>
    13. </html>
    ```css

    index.less

    body, html { margin: 0; padding: 0; }

title {

color: red; }

  1. ```javascript
  2. # index.js
  3. // 这是项目的js入口文件
  4. import $ from 'jquery'
  5. $(function(){
  6. $("#title").css("background-color","yellow");
  7. });

3. 命令行打包js资源

webpack bundle --mode=development

  • 开发环境:webpack —mode=development

webpack会以 ./src/index.js 为入口文件开始打包,打包后输出到 ./dist/main.js

  • 生产环境:webpack —mode=production

webpack会以 ./src/index.js 为入口文件开始打包,打包后输出到 ./dist/main.js

  • 结论:

webpack能处理js/json资源,不能处理css/img等其他资源
生产环境比开发环境多压缩一个js文件

4. 创建配置文件打包资源

  • 在项目根目录下创建webpack.config.js配置文件

    1. const {resolve} = require('path'); //node内置核心模块,用来设置路径。
    2. module.exports = {
    3. entry: './src/index.js', // 入口文件
    4. output: { // 输出配置
    5. filename: './js/bundle.js', // 输出文件名
    6. path: resolve(__dirname, 'dist') //输出文件路径配置
    7. },
    8. plugins: [
    9. // 插件配置
    10. ],
    11. mode: 'development' //开发环境(二选一)
    12. // mode: 'production' //生产环境(二选一)
    13. };
  • 运行命令打包资源到指定路径下

webpack

  • 此时会在dist下创建js文件,生成bundle.js,index.html引用js文件改为bundle.js

    5. 打包css、less文件

    loader使用步骤:下载——配置module的style-loader、css-loader、less-loader

  • index.js文件中引入样式资源

    1. import './index.less'
  • 修改webpack.config.js文件,新增module ```javascript const {resolve} = require(‘path’);

module.exports = { // 入口 entry:’./src/index.js’, // 输出 output:{ // 输出文件名 filename:’./js/bundle.js’, //输出路径 path:resolve(__dirname,’dist’) }, // loader的配置 module:{ rules:[ { //匹配哪些文件 test:/.less/, //使用哪些loader进行处理 use:[ ‘style-loader’, //创建style标签,将js中的样式插入到head中 ‘css-loader’, //将css文件变成commonjs模块加载到js中,里面的内容是字符串 ] }, { //匹配哪些文件 test:/.css/, //使用哪些loader进行处理 use:[ ‘style-loader’, ‘css-loader’, ‘less-loader’ ] }, ] }, // 模式 mode:’development’ }

  1. - 安装所需的loader
  2. `npm i style-loader css-loader less-loader -D`
  3. - 访问验证
  4. <a name="VeIae"></a>
  5. ## 6. 打包html资源
  6. > plugins使用步骤:下载——引入——配置html-webpack-plugin
  7. - 修改webpack.config.js文件,新增plugins配置
  8. ```javascript
  9. const {resolve} = require('path');
  10. const HtmlWebpackPlugin = require('html-webpack-plugin')
  11. module.exports = {
  12. // 入口
  13. entry: './src/index.js',
  14. // 输出
  15. output: {
  16. // 输出文件名
  17. filename: './js/bundle.js',
  18. //输出路径
  19. path: resolve(__dirname, 'dist')
  20. },
  21. // loader的配置
  22. module: {
  23. rules: [
  24. {
  25. //匹配哪些文件
  26. test: /\.less/,
  27. //使用哪些loader进行处理
  28. use: [
  29. 'style-loader',
  30. //创建style标签,将js中的样式插入到head中
  31. 'css-loader',
  32. //将css文件变成commonjs模块加载到js中,里面的内容是字符串
  33. ]
  34. },
  35. {
  36. //匹配哪些文件
  37. test: /\.css/,
  38. //使用哪些loader进行处理
  39. use: [
  40. 'style-loader',
  41. 'css-loader',
  42. 'less-loader'
  43. ]
  44. },
  45. ]
  46. },
  47. // 插件配置
  48. plugins: [
  49. new HtmlWebpackPlugin({
  50. // 复制一个html文件,并引入
  51. template: './src/index.html'
  52. })
  53. ],
  54. // 模式
  55. mode: 'development'
  56. }
  • 安装所需的plugins

npm i html-webpack-plugin -D

  • 会在dist目录下生成index.html,并自动引入built.js文件

    7. 打包图片资源

  • 修改webpack.config.js文件,新增module配置url-loader内容

    1. const {
    2. resolve
    3. } = require('path'); // 使用resolve()处理绝路径
    4. // html-webpack-plugin版本4 和 webpack5有兼容性问题,报错查看:https://blog.csdn.net/Kindergarten_Sir/article/details/110083041
    5. const HtmlWebpackPlugin = require('html-webpack-plugin'); // 打包html文件
    6. module.exports = {
    7. // 入口文件
    8. entry: "/src/index.js",
    9. output: {
    10. // 输出文件名
    11. filename: "bundle.js",
    12. // 输出路径,__dirname是当前文件的绝对路径,输出到绝对路径下的dist文件夹下
    13. path: resolve(__dirname, 'dist'),
    14. // 给打包后资源引入的路径前缀,静态资源最终访问路径 = output.publicPath + 资源loader或插件等配置路径
    15. publicPath: "./"
    16. },
    17. module: {
    18. rules: [
    19. // loader配置
    20. {
    21. // 匹配以样式结尾的文件
    22. test: /\.less$/,
    23. // use中的多个loader是自底向上或自右向左运行的
    24. use: [
    25. // 在index.html文件的head中创建style标签,并将js中的样式字符串插入
    26. 'style-loader',
    27. // 将css文件变成common.js的字符串加入到输出的js中
    28. 'css-loader',
    29. // less-loader将less译成css
    30. // 需要安装less和less-loader
    31. 'less-loader'
    32. ]
    33. },
    34. {
    35. // 对样式中引入的图片文件进行转译,不处理img标签
    36. test: /\.(jpg|png|gif)$/,
    37. // 下载:url-loader file-loader
    38. loader: 'url-loader',
    39. options: {
    40. // 图片小于10kB,会将图片传换成base64编码处理,
    41. // 目的是为了将小图转为编码减少请求数量减轻服务器压力,
    42. // 会导致图片体积增大,即base64编码比原图体积大(建议对小于12kB的图做编码处理,大图不处理)
    43. limit: 10 * 1024,
    44. // 关闭es6模块化处理,避免与html-loader的common.js规范冲突,发生冲突会导致路径变成“[object Module]”
    45. // 新版本已经没有这个问题了 可以不关闭。
    46. esModule: false,
    47. // 默认图片命名为chunk的hash值,太长了
    48. // [hash:10]为hash值前十位,[ext]表示文件原有扩展名
    49. name: '[hash:10].[ext]'
    50. }
    51. },
    52. {
    53. // 对img标签路径进行处理
    54. test: /\.html$/,
    55. // html-loader使用common.js规范对img标签路径进行处理
    56. loader: 'html-loader'
    57. }
    58. ]
    59. },
    60. // 插件配置
    61. plugins: [
    62. // HtmlwebpackPlugin默认功能为创建空的html(body为空)并引入打包输出的js文件
    63. // template配置是将指定的html文件的body内容加入到创建的html文件中
    64. // html-webpack-plugin版本4 和 webpack5有兼容性问题,报错查看:https://blog.csdn.net/Kindergarten_Sir/article/details/110083041
    65. new HtmlWebpackPlugin({
    66. template: './src/index.html'
    67. })
    68. ],
    69. mode: "development", // 开发环境
    70. // mode: "production", // 生产环境
    71. }
  • 安装所需的module

npm i url-loader file-loader html-loader -D

8. 打包其他资源(字体)

  • 修改webpack.config.js文件,新增module配置file-loader内容 ```javascript const {resolve} = require(‘path’); const HtmlWebpackPlugin = require(‘html-webpack-plugin’) module.exports = { // 入口 entry:’./src/index.js’, // 输出 output:{

    1. // 输出文件名
    2. filename:'built.js',
    3. //输出路径
    4. path:resolve(__dirname,'dist')

    }, // loader的配置 module:{

    1. rules:[
    2. {
    3. //匹配哪些文件
    4. test:/\.less/,
    5. //使用哪些loader进行处理
    6. use:[
    7. 'style-loader',
    8. 'css-loader',
    9. ]
    10. },
    11. {
    12. //匹配哪些文件
    13. test:/\.css/,
    14. //使用哪些loader进行处理
    15. use:[
    16. 'style-loader',
    17. 'css-loader',
    18. 'less-loader'
    19. ]
    20. },
    21. {
    22. // 处理图片资源,但是处理不了html中img的路径问题
    23. test: /\.(jpg|png|gif)$/,
    24. loader:'url-loader',
    25. options:{
    26. limit: 8* 1024,
    27. // 关闭es6
    28. esModule:false,
    29. name:'[hash:10].[ext]' //不重复名字
    30. },
    31. },
    32. {
    33. // 处理html中的img
    34. test: /\.html$/,
    35. loader:'html-loader'
    36. },
    37. {
    38. // 打包其他资源
    39. exclude: /\.(css|js|html)$/,
    40. loader: 'file-loader'
    41. }
    42. ]
  1. },
  2. plugins:[
  3. new HtmlWebpackPlugin({
  4. // 复制一个html文件,并引入
  5. template:'./src/index.html'
  6. })
  7. ],
  8. // 模式
  9. mode:'development'

}

```