webpack安装与使用

129 阅读2分钟

这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战

webpack安装与使用

一.webpack作用:

基于webpack 我们可以实现

1. 高阶语法转低阶语法

2. 模块化语法

3. 图片打包和压缩

4. css html js 压缩包

5.方便构建和打包 vue,react等框架的项目

二.webpack安装需要的依赖

 1.webpack
 2.webpack-cli
npm i webpack webpack-cli -g //最好全局安装,这样可以才可以使用命令行,其他的依赖最好局部
npm install html-webpack-plugin //重新打包我们的html,同时注入我们生成的js文件,文件名已经生成的文件的路径由配置决定
 npm i style-loader css-loader// 每次新增依赖需要重新link

三.webpack搭建顺序:

1、优化命令使用

1)npm run 命令*

2)打包的命令靠过去 -->npm run 命令*

3)webpack.config.js+npm项目* npm init -y ->生成package.json 修改*

创建wenpack.config.js文件

  1. .json文件里头只能存储标准的json对象*

① 有key 有value ② key必须是带双引号的字符串

③ 不能出现除key 与 value之外的字符 注释,多余的符号

(1.1)生成package.json文件并且创建webpack.config.js配置文件
1.npm init -y // 生成package.json 用于优化命令行
2.在项目根目录创建webpack.config.js文件 这是配置文件
(1.2)修改package.json文件-->优化命令 调用时使用 npm run dev打包
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "dev": "webpack --mode development",
    "build": "webpack --mode production",
    "link": "npm link webpack --save-dev"
  }
2、完成export打包配置
      //默认会去打包 项目根目录下的src下的inex.html  默认打包之后 dist main.js
      //  webpack --mode production   //开发 进行压缩可读性差
        //       webpack --mode development   //未压缩 需要指定打包文件用下面那行命令
        webpack 要打包的目标文件  --mode development
     //   牛刀小试:export的错误就没了
3、完成打包html时更新导入路径
(3.1)安装依赖 html-webpack-plugin
  npm install html-webpack-plugin       //并在配置文件做出相应修改
(3.2)在webpack.config.js 配置文件修改
const HtmlWebpackPlugin = require('html-webpack-plugin');
4、css文件打包
(4.1)安装css依赖文件
   npm i style-loader  css-loader  //并在配置文件做出相应修改
5、scss文件打包
(5.1)安装scss依赖文件
 npm i sass-loader      npm i  node-sass
//如果安装出错,使用下面命令安装
npm install yarn -g
yarn config set sass-binary-site http://npm.taobao.org/mirrors/node-sass
(5.2)配置文件修改
  {
         test:/.scss$/,
         use:["style-loader","css-loader","sass-loader"]
     }
6、自动删除打包后残存js
(6.1)安装clean依赖
  npm i  clean-webpack-plugin
(6.2)解释

新版本跟旧版本的使用不一样

新版本的构造器通过解构赋值得到

新版本的实例不需要指定参数.默认就是hong下面

(6.3)修改配置文件
 const {CleanWebpackPlugin} =require('clean-webpack-plugin')
 //配置清除包
 new CleanWebpackPlugin(),
7、热更新
(7.1)安装热更新
 yarn add webpack-dev-server
(7.2)配置文件修改
    //热更新配置
    devServer:{
        port:80,
        contentBase:__dirname+"/hong"
    },
(7.3)package文件修改
  "dev": "webpack-dev-server",
8、打包多个js和html文件

业务驱动 单页面 单js 多个页面 多个js

html-webpack-plugin ==>解决多个html问题

升级entry -->js 升级output -->js

    配合升级entry
    1.一个页面多个js(饿汉式)
       此处修改配置文件   entry: {  index: './index.js',//   hong:'./a.js' },
 2.一个页面可选多js(饱汉)
//指定打包的key,与entry绑定
chunks:['index']
 //指定除了某个之外
excludeChunks:['a']
9、打包image和css里头的img

注意 : 并没有笼统的讲是图片

因为图片的引入的媒介不一样,那么处理的方式不一样

(9.1)下载依赖
     file-loader =>css里头的background-image:url('./hong.png')
        html-loader => html 里头的<img src="./hong.png">
        yarn add html-loader file-loader
10、最终配置文件 webpack.config.js示例与解释
const HtmlWebpackPlugin = require('html-webpack-plugin');
​
const {CleanWebpackPlugin} =require('clean-webpack-plugin')
​
module.exports={
    //热更新配置
    devServer:{
      //端口
        port:80,
      //打包到哪个路径
        contentBase:__dirname+"/hong"
    },
    //配置入口,以当前文件目录作为开始目录
    entry: {
      //别名:要打包的js
      index: './index.js',
      hong:'./a.js'
    },
​
    output:{
        //配置打包的目录和文件名字
        path: __dirname + '/hong',
        filename:'[name]_[hash:9].js'
    } ,
    //s使用插件
    plugins:[
      
        //配置清除包
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            //用来指定模板
            template:'./index.html',
            //文件名 再热更新后通过这个访问
            filename:'hongjilin.html',
            //当指定模板后,模板优先,没有指定的时候才生效
            title:'大家嗨起来',
         /*   minify:{ 这个命令会压缩html
            // /取出src后面的空格,
            // //    collapseWhitespace:'true'
             },*/
            //指定打包的key,与entry绑定
            // chunks:['index']
            //指定除了某个之外的js打包
            excludeChunks:['a']
        }),
        //打包第二个页面
        new HtmlWebpackPlugin({
            //用来指定模板
            template:'./copy.html',
            //文件名 再热更新后通过这个访问
            filename:'copyweb.html',
            //当指定模板后,模板优先,没有指定的时候才生效
            title:'大家起来',
            excludeChunks:['index']
        })
    ],
    
    module:{
        rules:[
            {       //规定什么文件使用这个规则
                   test:/.css$/,
                   //使用什么加载器
                   use:['style-loader','css-loader'] 
            },
                 {
                    test:/.scss$/,
                    use:["style-loader","css-loader","sass-loader"]
                 },
                 {  //图片打包
                     test: /.png|jpe?g|gif|bmp|svg$/,
                     use:[
                         {
                             loader:'file-loader',
                             options:{
                               //[ext]是图片标准后缀名
                                 name:'[name]_[hash:9].[ext]',
                               //指定输出地址
                                 outputPath:'./images/'
                             }
                         }
                     ]
                 },
                 {
                     test:/.(html)$/,
                     use:{
                         loader:'html-loader',
                     }
                 }
        ]
    },
​
}
11、package文件修改
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    //"dev": "webpack-dev-server", 使用热更新  文件内不能注释
     "dev": "webpack --mode development",
    "build": "webpack --mode production",
    "link": "npm link webpack --save-dev"
  },