webpack5搭建与基本配置

 webpack基础构建

  • 新建文件夹进入文件夹
  • 查看是否安装node,命令:node-v
  • 创建package.json文件,命令:npm init -y
  • 安装webpack和webpack-cli,(命令自动创建出package-lock.json文件和node_modules文件夹)命令:npm install webpack webpack-cli --save-dev
  • npx webpack -v查看版本
  • 手动创建文件夹src,在src文件夹内创建出index.js
  • 手动创建一个webpack.config.js配置文件。
const path = require('path')//管理路径模块的包
//CommonJS语法
module.exports = {
	mode:'development',//开发模式
	entry:path.join(__dirname,'src','index.js'),
	//__dirname代表当前文件位于的目录
	//上述整行命令代表的是,整个打包的入口
	output:{
		path:path.join(__dirname,'dist'),
		//path把打包好的文件放在什么路径下
		filename:'bundle.js',
		//filename打包好的文件叫啥名
	}
}
  • 去package.json文件内“scrptis”里去配置脚本"build":"webpack"
  • 终端去输入命令:npm run build 将文件打包好
  • 在dist文件下新建一个index.html文件,然后用<script>引入bundle.js文件,直接在浏览器中打开就ok
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<p>webpack</p>
		<script src="dist/bundle.js"></script>
	</body>
</html>

 

webpack拆分配置

 首先在build文件目录下新建四个js文件 

  • 通用配置:webpack.common.js
  • dev配置: webpack.dev.js
  • prod配置:webpack.prod.js
  • 通用地址引入:paths.js

 paths.js

/**
 * @description 常用文件夹路径
 * @author Seven七七
 */

const path = require('path')

const srcPath = path.join(__dirname, '..', 'src')
const distPath = path.join(__dirname, '..', 'dist')

module.exports = {
    srcPath,
    distPath
}

 webpack.common.js: 

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { srcPath, distPath } = require('./paths')

module.exports = {
    entry: path.join(srcPath, 'index'),
    plugins: [
        new HtmlWebpackPlugin({
            template: path.join(srcPath, 'index.html'),
            filename: 'index.html'
        })
    ],
}

webpack.dev.js

const path = require('path')
const webpack = require('webpack')
const webpackCommonConf = require('./webpack.common.js')
const { merge } = require('webpack-merge')
const { srcPath, distPath } = require('./paths')

module.exports = merge(webpackCommonConf, {
    mode: 'development',
    devServer: {
        historyApiFallback: true,
        static: distPath,
        open: true,
        compress: true,
        hot: true,
        port: 8080,

        // 设置代理 —— 如果有需要的话!
        proxy: {
            // 将本地 /api/xxx 代理到 localhost:3000/api/xxx
            '/api': 'http://localhost:3000',

            // 将本地 /api2/xxx 代理到 localhost:3000/xxx
            '/api2': {
                target: 'http://localhost:3000',
                pathRewrite: {
                    '/api2': ''
                }
            }
        }
    },
    plugins: [
        new webpack.DefinePlugin({
            // window.ENV = 'production'
            ENV: JSON.stringify('development')
        })
    ]
})

 webpack.prod.js :

const path = require('path')
const webpack = require('webpack')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
const webpackCommonConf = require('./webpack.common.js')
const { merge } = require('webpack-merge')
const { srcPath, distPath } = require('./paths')

module.exports = merge(webpackCommonConf, {
    mode: 'production',
    output: {
        filename: 'bundle.[contenthash:8].js',  // 打包代码时,加上 hash 戳
        path: distPath,
        // publicPath: 'http://cdn.abc.com'  // 修改所有静态文件 url 的前缀(如 cdn 域名),这里暂时用不到
    },
    plugins: [
        new CleanWebpackPlugin(), // 会默认清空 output.path 文件夹
        new webpack.DefinePlugin({
            // window.ENV = 'production'
            ENV: JSON.stringify('production')
        })
    ]
})
  • 安装插件  :
npm install -D webpack-dev-server
npm i html-webpack-plugin
npm i clean-webpack-plugin
npm i webpack-merge
  • 在src目录下新建index.html

 index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p class="wes">webpack demo5</p>
</body>
</html>

执行命令:npm run dev启动项目

执行命令:npm run build打包

当前package.json文件:

{
  "name": "webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev-without-dev-server": "webpack --config build/webpack.dev.js",
    "dev": "webpack serve --config build/webpack.dev.js",
    "build": "webpack --config build/webpack.prod.js"
  },
  "keywords": [],
  "author": "Seven_Ting",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^5.88.1",
    "webpack-cli": "^5.1.4",
    "webpack-dev-server": "^4.15.1"
  },
  "dependencies": {
    "clean-webpack-plugin": "^4.0.0",
    "html-webpack-plugin": "^5.5.3",
    "webpack-merge": "^5.9.0"
  }
}

webpack处理样式

  • 首先安装插件:
npm i style-loader css-loader postcss-loader less-loader -D
npm i less -D
npm i autoprefixer -D
  • 新建文件 postcss.config.js

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

  • 处理样式写在公共配置文件里webpack.common.js:
  •  在webpack.common.js文件中的module对象的rules数组中配置css样式相关

{
    test: /\.css$/,
    // loader 的执行顺序是:从后往前
    use: ['style-loader', 'css-loader', 'postcss-loader'] 
    // 加了 postcss
},
{ 
    test: /\.less$/,
    // 增加 'less-loader' ,注意顺序
    use: ['style-loader', 'css-loader', 'less-loader']
}
  •  在src目录下新建两个css文件

index.css:  

body{
    background: green;
}

index2.less:

.wes{
    font-size: 50px;
    color: aliceblue;
}

执行命令npm run dev:

 执行命令npm run build:

 注意:

        1、样式loader是从后往前一步一步解析的

        2、打包后的css文件是直接在html的<script>标签中去插入css样式的

        3、postcss-loader是用作浏览器兼容性的,几乎兼容所有浏览器

webpack处理ES6

注意:需要去webpack.common.js文件里的利用babel-loader,处理babel需要配置一个文件叫.babelrc

  •  安装插件:
npm i babel-loader -D
npm i @babel/core -D
npm i @babel/preset-env -D
  • 新建文件.babelrc

  •  .babelrc:
{
    "presets": ["@babel/preset-env"],
    "plugins": []
}
  • webpack.common.js: 的module对像的rules数组内配置

{
    test: /\.js$/,
    use: ['babel-loader'],
    include: srcPath,
    exclude: /node_modules/
},

测试:

  • 新建math.js文件

export const sum = (a, b) => {
    return a + b
}
  •  在index.js文件中编码

import { sum } from './math'
const sumRes = sum(10, 20)
console.log('sumRes', sumRes)

const print = (info) => {
    console.log(info)
}
print('hello webpack 5')

 运行npm run dev

webpack处理图片

webpack.dev.js 线下图片处理

在webpack.dev.js文件的model.rules直接引入

  • 安装插件:
sudo cnpm install file-loader -D
  • webpack.dev.js代码: 

 

{
    test: /\.(png|jpg|jpeg|gif)$/,
    use: 'file-loader'
}

测试dev: 

  • 新建文件夹src.img加入两张图片

 

  • 在index.js文件中引入:

// 引入图片
function insertImgElem(imgFile) {
    const img = new Image()
    img.src = imgFile
    document.body.appendChild(img)
}
import imgFile1 from './img/img1.jpg'
insertImgElem(imgFile1)
import imgFile2 from './img/img2.jpg'
insertImgElem(imgFile2)
  • 运行命令:npm run dev

webpack.prod.js线上图片处理 :

注意:配置线上图片时可以将小于多少的图片打包成为一个base64格式的图片,这样能减少浏览器访问速度,提高性能

  • 安装插件:
sudo cnpm i url-loader -D
  • webpack.prod.js代码:

{
    test: /\.(png|jpg|jpeg|gif)$/,
    use: {
        loader: 'url-loader',
        options: {
            limit: 50 * 1024,
            outputPath: '/img1/',
        }
    }
},

 测试:

  • 执行npm run build打开打包文件的index.html

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值