1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > webpack 使用 保姆级 html css js 打包 处理

webpack 使用 保姆级 html css js 打包 处理

时间:2021-11-19 11:08:49

相关推荐

webpack 使用 保姆级 html css js 打包 处理

概念

webpack是一个前端打包工具

用它来处理现代前端错综复杂的依赖关系(A插件需要B插件B插件有D插件 F插件需要A插件)生成浏览器可以识别静态资源

Vue 前期脚手架就是用webpack制作

(Vue 开始推荐vite构建工具(更快))

react脚手架

angular等现代框架脚手架都是依赖webpack

webpack核心概念

入口

entry

项目运行的起点

告诉webpack从哪开始打包

出口

output

打包好放入哪

filename 文件名

path 路径

模式

mode

产品模式

production

开发模式

development

loader

加载器

webpack默认只能加载处理js文件

loader让webpack拥有处理其他文件的能力

插件

plugin

webpack运行生命周期过程中做一些其他任务

(压缩,清理)

webpack配置

默认webpack.config.js 配置文件中

devServer

安装:npm i webpack-dev-server -D

作用:开启一个本地服务器

open:true

是否自动打开浏览器

host:“localhost”

域名

port:8080

端口号

hot:true

更新(文件保存,网页自动更新)

package.json

script:{“serve”:"webpack serve"}

npm run serve 运行项目

loader

加载器

css处理

安装:npm i css-loader style-loader -D

作用:css-loader处理.css文件 style-loader把css加载到style标签内

module:{

rule:[{test:/\.css$/,use:["style-loader","css-loader"]}]

}

处理文件

(图片,文件)

安装: npm i file-loader url-loader -D

作用:加载图片和文件

{test:/\.(png|jpg|jpeg|gif|svg)$/,use:[{loader:"file-loader",options:{limit:5000,name:"images/[hash].[ext]"}}]}

处理sass

安装: npm i sass sass-loader -D

处理scss文件

{test:/\.scss$/,use:["style-loader","css-loader","sass-loader"]}

plugin

插件

html模板插件

安装:npm i html-webpack-plugin -D

作用

作用:生成html模板文件,自动把打包好的js插入到模板文件

在webpack.config.js 导入

const HtmlWebpackPlugin = require("html-webpack-plugin")

plugins:[

new HtmlWebpackPlugin({template:"./public/index.html"})

]

清理dist目录

安装:npm clean-webpack-plugin -D

作用:打包前删除 dist目录

const {CleanWebpackPlugin} = require("clean-webpack-plugin")

plugins:[new CleanWebpackPlugin()]

抽出插件

安装: npm i mini-css-extract-plugin -D

作用:把css抽出为一个单独的文件

导入: const MiniCssExtractPlugin = require("mini-css-extract-plugin")

配置loader

{test:/\.css$/,use:[MiniCssExtractPlugin.loader,"css-loader"]}

实例化插件

new MiniCssExtractPlugin()

优化

css 压缩

安装:npm i css-minimizer-webpack-plugin -D

导入:const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");

js的压缩

安装:npm i terser-webpack-plugin -D

导入:const TerserPlugin = require("terser-webpack-plugin");

实现压缩

与优化

optimization: {

minimize: true, //默认是压缩

minimizer: [new CssMinimizerPlugin(),new TerserPlugin()],//压缩器

},

代码分割

optimization: {

splitChunks: {

chunks: "all",

// 所有的 chunks 代码公共的部分分离出来成为一个单独的文件},

}

特殊标识

[hash] 把内容通过hash算法算出来的一串字符

[hash:7] 取hash字符串前7个

[name] 原文件名称

[ext] 文件的后缀名

目录别名

resolve: {

// 别名:@代表是 src目录

alias: {

'@': path.resolve(__dirname, './src'),

}

},

开发工具

devtool:"eval-cheap-source-map",

作用,错误与源代码有个一一对应关系

link与script

<script defer src=""></script>

等待页面内容加载好再去加载js

<link href= “” rel=prefetch>

提前预加载css

webpack中的魔法注释

魔法注释

import(/* webpackChunkName:"jquery" , webpackPrefetch: true */ "jquery").then(({default:$})=>{

console.log($);

})

/* webpackChunkName:"jquery" */

给当前的js 文件命名

/* webpackPrefetch: true */

网络有空闲预加载js

哈希命名

01 可以控制浏览器的缓存

当文件发生变化时候,hash就变化,文件名也就变化,浏览器就不缓存

当文件名保持不变,浏览器二次请求会从缓存里面去请求内容

02 提供二次加载的速度(有效的控制缓存)

contenthash

内容发生变化 contenthash值才发送变化

chunkhash

入口发生变化,当前的文件chunkhashhash会变化

hash

只要项目内容发送变化,hash就会变化

环境变量

配置:通过环境命令 产品环境 压缩代码,是生产环境不压缩代码,打开devtool

项目开发中 ,产品环境 baseURL :8888

生产环境 baseURL http://localhost:8080

1.

npm i cross-env -D

2.

package.json 传参

"build": "cross-env NODE_ENV=production webpack",

"serve": "cross-env NODE_ENV=development webpack serve",

3. webpack.config.js使用

mode:process.env.NODE_ENV,

devtool:process.env.NODE_ENV==="production"?false:'eval-cheap-source-map',

4. js文件中使用

var baseURL = "";

if(process.env.NODE_ENV=="production"){

baseURL = "";

}else{

baseURL = "http://localhost"

}

console.log("当前环境:",process.env.NODE_ENV,baseURL);

vue脚手架

不要vue脚手架如何搭建项目?

安装

npm i vue -S

npm i

vue-loader

处理.vue

vue-template-compiler

编译vue目录

vue-hot-reload-api

热更新

vue-style-loader

处理vue 样式

配置

01 导入

const {VueLoaderPlugin} = require("vue-loader")

02 配置

{test:/\.vue$/,use:["vue-loader"]}

03 插件

plugins:[new VueLoaderPlugin()]

js

模板文件 public/main.html

<div id="app"></div>

main.js

import { createApp } from 'vue';

// 导入App.vue

import App from './App.vue';

console.log(App);

// 创建App并挂载

createApp(App).mount("#app")

App.vue

<template >

<div>

<h1>你好Vue3</h1>

</div>

</template >

自由主题

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。