webpack全面学习

安装

  • 本地安装(通常建议进行本地安装,方便分离项目)
npm install --save-dev webpack
npm install --save-dev webpack@<version>
如果使用的webpack4+版本,还需要安装webpack-cli
npm install --save-dev webpack-cli
  • 全局安装(全局安装不易分离项目,不建议)
npm install --global webpack
  • 体验最新版本
npm install webpack@beta
npm install webpack/webpack#<tagname/branchname>

起步

创建webpack目录
mkdir webpack-demo 
cd webpack-demo
npm init -y
npm install webpack webpack-cli --save-dev

在这里插入图片描述
创建完后,目录是这样的
版本如下:
在这里插入图片描述然后根据官方文档进行一个小测试,具体地址如下:
https://www.webpackjs.com/guides/getting-started/
简单的了解下webpack的运作方式

模块

没什么好讲的

配置文件

在目录中建一个文件webpack.config.js

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

把这段放进去就能够生成bundle.js了

npm脚本

在这里插入图片描述
在package.json文件里的scripts里面,添加build,就可以用npm run build进行编辑了,可以不用npx webpack命令了;其中用npm run build – --colors可以把变量colors传递给webpack命令

资源管理

css管理

1 添加css管理模块

npm install --save-dev style-loader css-loader

配置webpack.config.js

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [{
            test: /\.css$/,
            use: [
                'style-loader',
                'css-loader'
            ]
        }]
    }
};
图片管理

安装模块

npm install --save-dev file-loader

在webpack里面进行配置

{
              test: /\.(png|svg|jpg|gif)$/,
              use: [
                 'file-loader'
                ]
                }
字体管理

用到的是file-loader 和 url-loader进行处理的
配置webpack.config.js

{
          test: /\.(woff|woff2|eot|ttf|otf)$/,
          use: [
            'file-loader'
         ]
 }
数据管理

json字符串默认就是支持的,可以直接引入
至于csv,tsv,xml就需要用csv-loader和xml-loader模块进行处理

npm install --save-dev csv-loader xml-loader

配置webpack.config.js

{
          test: /\.(csv|tsv)$/,
          use: [
            'csv-loader'
          ]
        },
        {
          test: /\.xml$/,
          use: [
            'xml-loader'
          ]
        }
全局资源

一种思想,就是把代码和资源整合在一起,方便进行移植

管理输出

这个模块主要弄清楚以下几点:
1 入口文件entry可以分离出很多Js
2 配置输出
3 使用HtmlWebpackPlugin进行js配置
4 使用clean-webpack-plugin进行dist清理(不过我这里一直报错,没有排查)
具体设置可以参考官网:
https://www.webpackjs.com/guides/output-management/#%E8%AE%BE%E5%AE%9A-htmlwebpackplugin

开发

根据官方文档解释,需要弄清楚以下几个东东的用法:
1 source map,用来追踪报错的源码位置的,方便调试
2 了解webpack’s Watch Mode
3 了解webpack-dev-server
4 了解webpack-dev-middleware

source map
const path = require('path');
  const HtmlWebpackPlugin = require('html-webpack-plugin');
  const CleanWebpackPlugin = require('clean-webpack-plugin');

  module.exports = {
    entry: {
      app: './src/index.js',
      print: './src/print.js'
    },
+   devtool: 'inline-source-map',
    plugins: [
      new CleanWebpackPlugin(['dist']),
      new HtmlWebpackPlugin({
        title: 'Development'
      })
    ],
    output: {
      filename: '[name].bundle.js',
      path: path.resolve(__dirname, 'dist')
    }
  };

加了这句后,就可以在调试的时候,报错直接怼到源代码位置了

观察者模式

添加以下代码就可以时时刻刻观察代码改动了

 {
    "name": "development",
    "version": "1.0.0",
    "description": "",
    "main": "webpack.config.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
+     "watch": "webpack --watch",
      "build": "webpack"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
      "clean-webpack-plugin": "^0.1.16",
      "css-loader": "^0.28.4",
      "csv-loader": "^2.1.1",
      "file-loader": "^0.11.2",
      "html-webpack-plugin": "^2.29.0",
      "style-loader": "^0.18.2",
      "webpack": "^3.0.0",
      "xml-loader": "^1.2.1"
    }
  }
使用webpack-dev-server

安装

npm install --save-dev webpack-dev-server

添加以下内容

const path = require('path');
  const HtmlWebpackPlugin = require('html-webpack-plugin');
  const CleanWebpackPlugin = require('clean-webpack-plugin');

  module.exports = {
    entry: {
      app: './src/index.js',
      print: './src/print.js'
    },
    devtool: 'inline-source-map',
+   devServer: {
+     contentBase: './dist'
+   },
    plugins: [
      new CleanWebpackPlugin(['dist']),
      new HtmlWebpackPlugin({
        title: 'Development'
      })
    ],
    output: {
      filename: '[name].bundle.js',
      path: path.resolve(__dirname, 'dist')
    }
  };

然后在package.json里配置如下:

{
    "name": "development",
    "version": "1.0.0",
    "description": "",
    "main": "webpack.config.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
      "watch": "webpack --watch",
+     "start": "webpack-dev-server --open",
      "build": "webpack"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
      "clean-webpack-plugin": "^0.1.16",
      "css-loader": "^0.28.4",
      "csv-loader": "^2.1.1",
      "file-loader": "^0.11.2",
      "html-webpack-plugin": "^2.29.0",
      "style-loader": "^0.18.2",
      "webpack": "^3.0.0",
      "xml-loader": "^1.2.1"
    }
  }
使用webpack-dev-middleware

感觉用不到…自己摸索吧

模块热替换

很多第三方框架都内部继承了…没什么好讲的…除非是单独使用webpack进行打包…如果单独使用…我何必不用gulp?

tree shaking

tree shaking 是一个术语,通常用于描述移除 JavaScript 上下文中的未引用代码(dead-code);说白了,就是手贱多写了一些没有用的代码,但是你有忘记了,那么它来帮你搞定咯;目前我还用不到…

生产环境构建

本章需要了解的是开发环境和生产环境的区别,需要注意以下几点:
1 开发环境,我们需要能够代码追踪,实时加载和热模块替换等能力
2 生产环境我们需要更清凉的,体积更小的打包机制
3 但是有一些通用配置,所以我们可以用webpack-merge工具
4 在生产环境中,我们推荐使用source-map而不是inline-source-map

webpack-merge

安装

npm install --save-dev webpack-merge

然后在package.json里面进行调用不同模块的webpack配置

"scripts": {
-     "start": "webpack-dev-server --open",
+     "start": "webpack-dev-server --open --config webpack.dev.js",
-     "build": "webpack"
+     "build": "webpack --config webpack.prod.js"
    },

代码分析

弄清楚以下几个知识点:
1 代码分离就是为了更好的组织代码逻辑
2 防止重复的CommonsChunkPlugin插件
3 动态导入的import()的使用

懒加载

就是利用import在需要的时候进行加载,进行人机交互设计

缓存

缓存机制比较清晰,可是缓存的用处和其他框架貌似没有关联,以后研究框架的时候在回过头来看.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值