Webpack使用
为什么需要 Webpack
- 随着前端需要处理的内容越来越多,同时也为了解决 JS 全局标识符污染问题,模块化开发成为了主流,但是浏览器却不能识别模块化。
- 随着新时代语法的更新,让开发更有效率,维护更方便。但是依然会有大量的新语法在很多浏览器上不太支持,开发和生成出现了问题,如 ES6 的语法。
- 为了提升开发效率,出现了大量的预编译语言,如 less,scss,但是这些语言不能被浏览器直接识别。那么就需要生产时提前编译,如果项目中用到了很多预编译语言,那么所有预编译语言的编译就是一一个繁琐的工作。
- 以前对于小图片请求性能的考虑,大多是做成精灵图,但是就算做成精灵图也是需要一次请求, 有的时候就是处于性能的考虑需要将图片编程 base64 的编码,因此也是需要一个编码的工具。
- 框架的出现和大量的使用,需要在开发时能够实时了解开发结果。
- 总之,随着技术的发展,就需要一一个工具来提升代码的开发效率,优化代码的编译。将浏览器不能识别的语法自动处理为浏览器能够识别的语法。
其他构建工具 Grunt/Gulp
-
Grunt 是一个任务执行者,有大量现成的插件封装了常见的任务,也能管理任务之间的依赖关系,自动化的执行依赖的任务,每个任务的具体执行代码和依赖关系都写在配置文件 Gruntfile.js 里
-
Gulp 是一个基于流的自动化构建工具.
-
简单的说:就是你定义了很多任务,让 Grunt/Gulp 自动去执行这些任务
Grunt/GulpSWebpackXtk
- Grunt/Gulp 更强调流程自动化,模块化不是核心
- Webpack 更强调模块化开发管理,而文件的压缩合并预处理功能都是附带的
- Webpack 的优点使得 Webpack 在很多场景下可以替代 Gulp/Grunt 类的工具。
Webpack 是什么
webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时,它会在内部构建一个依赖图(dependency graph),此依赖图对应映射到项目所需的每个模块,并生成一个或多个 bundle。
模块打包器
- 随着开发的复杂度越来越高,以前的开发方式已经难以满足我们的需要,为了更快更好的开发程序会大量的使用到模块化开发,以及一些优秀的预处理器(如 less, scss),
- 但这些模块化工具,浏览器不能够直接识别,所以我们就需要将开发的的代码转为大部分浏览器能识别的代码,所以我们需要一个工具,将我们的模块进行处理,这个处理的过程就是打包。
- 所以 webpack 就是前端模块化打包工具
Webpack 核心概念
入口(entry)
-
入口起点(entry point)指示 webpack 应该使用哪个模块(文件),作为构建其内部依赖图的开始
-
说明: 在 webpack 构建时会先找到入口文件,然后在入口文件中无找到需要直接或间接依赖的模块 webpack 将每个依赖进行处理,最后出入构建后的结果
-
例如:
module.exports = { entry: 'index.js'
出口(output)
-
Output:输出指示,告诉 Webpack 打包好的资源 bundles 输出到哪里去,以及如何命名输出的文件
-
例如:
module.exports = { entry : 'index.js', output: { filename: 'handle.js', //配置导出的文件名 path: resolve(_ dirname,'dist') // 将打包后的文件放在哪 个文件夹中 } }
Loader 处理文件
-
Webpack 核心只能处理 JavaScript 已经 JSON 资源文件,非 JS 文件 Webpack 只能交给 Loader 处理
-
通过来说就是通过 loader 将 webpack 不能是被的文件转成 webpack 能识别的模块
module.exports = { module: { // module rules:[ // 规则 { //正则匹配 test: N.css$/, //使用css-loader,将css转成js能识别的模块 use: 'css-loader' } ] } }
Plugin 插件
-
Plugin 插件,可以用于执行范围更广的任务.插件的范围包括从打包优化,压缩到重新定义环境变量.
-
通俗的来了解,插件就是对于 webpack 功能的扩展
-
例如:
const HtmlWebpackPlugin = require(' html-webpack plugin'); module.exports = { plugins: [ new HtmlWebpackPlugin(); }
Mode 模式
-
Mode 模式,用来告诉 Webpack 在不同的模式下使用不同的配置主要有开发模式和生产模式
-
Mode 模式用于指定 Webpack 打包使用相应模式的配置
Webpack 安装
1.全局安装
npm install -g webpack webpack-cli
2.局部安装
注意局部安装将 webpack 安装到开发依赖中
npm install webpack webpack-cli --save-dev
Webpack 和 Webpack-cli 介绍
- webpack4.0 以后,执行方式就发生了改变,不再是 webpack 一波流,而是多了一个 webpack-cli.所以安装时两个都需要安装
- webpack 是 webpack 的核心代码
- webpack-cli 是提供 webpack 命令
npm install -g webpack webpack-cli
Webpack 打包命令
-
语法使用
webpack <entry> <output>
-
例子:
webpack index.js bundle.js
-
命令的意思,是将 index.js 作为打包的入口开始打包,打包后的文件叫做 bundle.js
-
定义模块
-
通过 webpack 命令打包
-
打包后的结果
-
嵌入 html 运行
-
打包 css
-
打包 css 结果,会出现以下错误
总结
- webpack 只能处理 js/json 资源,不能处理 img/css 等其他资源
- 生产环境和开发环境将模块化编译成浏览器能识别的模块化
- 生产环境比开发环境多一个压缩 js 带代码的功能
Webpack 配置
- webpack 零配置不需要您使用配置文件。但是,它将假定项目的入口点是 src/index ,并将结果输出为经过精简和优化的 dist/main.js 以供生产使用。
- webpack 配置文件名称固定为 webpack.config.js
- 处理好配置文件以后,在打包时只需要在命令行输入 webpack 命令就可以打包了,
- 因为 webpack 在打包时会自动查找到 webpack.config.js 进行解析
- webpack.config.js 的作用就是告诉 webpack 接下来要做哪些工作
配置文件选项
-
所有的构建 I 具都是基于 node 环境的,因此,在 webpack.config.js 中默认使用 commonjs 模块化规范
-
配置文件代码:
const {resolve } = require( path' ) //导出webpack配置 module.exports = { // webpack打包的入口文件(起点) entry:" ./src/indexjs", output:{ filename:" bundle.js", //出口文件 path:resolve( dirname," build") // 出口文件所在的目录 }, module:{ // rules规则,详细的loader配置, //不同的loader处理不同的文件 rules:[ }, plugins:[ // 详细的plugins插件的配置 ], mode:" development", // " production"产品模式
打包 css 样式文件
-
打包 css 是需要通过 css-loader 将样式文件处理为 webpack 识别的模块
-
webpack 将样式文件当成模块打包到出口的 js 文件中
-
通过 style-loader 在 html 文件中创建 style 标签,并将 js 中内容抽出插入到 style 中
-
下载所需要的 loader 包
-
将 loader 安装到开发依赖,项目打包上线以后,就不需要这些 loader 了
npm install style-loader css-loader--save-dev
-
配置处理样式文件的 loader
module:{ // rules规则,详细的loader配置, //不同的loader处理不同的文件 rules:[ // rules规则是一个数组,里面可以配置多个规则,一个规则就是一个对象 { //正则,匹配所有后缀名为css的文件并使用下面的loader处理 test: A.css$/, // use使用使用那些loader处理匹配成功的文件 use:[ //在将js中的样式资源插入到style标签中,并添加要页面的head中 "style-loader", // css-loader会将css文件处理为commonjs模块并加载到js中 css-loader"
-
打包
npx webpack
打包 less 样式文件
-
打包 less 样式文件,我们就需要有能够将 less 转为 css 文件的 loader
-
下载处理 less 文件的 loader
npm install less less-loader --save-dev
-
配置 less 样式文件的 loader
module:{ rules:[ //配置处理less文件的规则 { test: A\.les$/, use:[ "style-loader", 'css-loader", //将less文件编译为css文件再用处理css文件的loader处理后续 "less-loader" }
-
配置完毕以后就可以在命令行使用 webpack 命令进行打包了
打包 scss 样式文件
-
打包 scss 样式文件,我们就需要有能够将 scss 转为 css 文件的 loader
-
下载处理 scss 文件的 loader
npm install node-sass sass-loader --save-dev
-
配置 scss 样式文件的 loader
module:{ rules:[ //配置处理scss文件的规则 { test: A\.scss$/, use:[ "style-loader", css-loader" , //将scss文件编译为css文件再用处理css文件的loader处理后续 'sass-loader" ] } ]
-
配置完毕以后就可以在命令行使用 webpack 命令进行打包了
打包资源
打包 html 资源
-
webpack 打包 html 文件资源,不是使用 loader 而是使用插件使用 html-webpack plugin 插件自动生成 html 文件
-
下载插件
npm install html-webpack-plugin --save-dev
-
在 webpack.config.js 中配置插件说明
引入下载好的插件 在 plugins 中配置插件
const HtmlWebpackPlugin = require("html-webpack- plugin") const (resolve) = require(" path"); module.exports =l plugins:[ new HtmlWebpackPlugin(f //配置html打包模板 template:"./src/main.html" 1)
应用
-
src 文件夹是开发文件夹,在这个文件夹中开发 html 文件内容
-
html-webpack-plugin 会在打包的 dist 目录中生成新的 html 文件
-
开发的 html 文件中的内容插入到 plugin 生成的 html 文件中
-
并在新生成得 html 文件中插入打包后的 js 文件
-
运行结果
配置脚本命令
-
配置脚本命令使用 webpack 打包说明
-
在所有的终端里使用 webpack 命令,默认都是全局安装的 webpack
-
项目为了保证统一需要使用项目本地 webpack 进行打包
-
脚本中运行的 webpack 是使用本地 webpack 命令
-
在 package.json 中配置脚本命令
"scripts": l "test": "echo 1" Error: no test specified" && exit 1", "build": "npx webpack" ],
-
配置完成以后,在命令行运行 npm run build 命令来使用本地 webpack 了
打包图片资源
-
处理图片资源说明
-
需要使用到 url-loader 处理图片
-
注意 url-loader 依赖于 file-loader,因此安装时注意.两个都要安装
npm install url-loader file-loader --save - dev
-
样式中引入图片就是通过 background 属性来引入背景图片
-
接来下我们以在 Css 文件中为例了解 webpack 如何打包图片资源
.box[ width: 200px; height: 112px; background: url(img/logo.png) no-repeat;
图片打包配置
-
打包后,发现所有的图片都会打包成为 base64 图片
-
base64 图片的优点:减少服务请求次数减轻服务器压力
-
base64 图片的缺点:图片的体积会变大,文件的加载速度会变慢
-
因此我们要综合考虑体积比较小的图片打包为 base64,图片太大的图片,就不打包为 base64
-
低于设置大小的图片打包为 base64 图片,超过设置大小的图片不打包为 base64 图片
module.exports = { //.. module:{ rules:[ test: A.(jpglpng|gif)$/, //使用一个loader处理,用loader配置 loader: "url-loader", options:{ //配置图片打包loader //图片大小低于8kb的会打包为base64格式, //超过的处理为文件格式 limit: 8 * 1024 ] }, // ....
html 图片打包
-
html 文件时使用 http-webpack plugin 插件将内容插入到打包后的 html 文件中
-
在 html 文件中引入的图片路径在处理后不会发生改变
-
打包后 html 文件就找不到图片,所以显示不了图片
-
安装:
npm install html-loader --save-dev
-
loader 配置
module.exports =l 11... module:( rules:[ 11.. test: /.htmI$/, 11 html-loaderkhtml145I 11 html-loaderet imgHlimg,url-loader loader:"html-loader", //默认情况下,html-loader 生成使用ES modules语法的JS模块 options: l esModule: false ], 11...
打包其他资源
-
打包除了 html,css,js 外的其他资源
-
利用 exclude 来排除已经配置处理文件,处理所有不是 exclude 排除的文件
-
利用 file-loader 来处理其他资源文件
-
以字体图标为例:
<span class="iconfont icon-weixin"> </span> <span class="iconfont icon-ziyuan"> </span> <span class="iconfont icon-wodejianying"> </span> <span class="iconfont icon-shouyejianying"> </span>
-
字体图标的打包配置
module.exports ={ // ... module:{ rules:[ { test: A\.css$/, use:["style-loader"," css-loader"] }, //打包其他资源 // exclude排除,除了html,css,js文件外所有文件 //都是用file-loader来处理,包括字体图标 exclude: A\.(html|(cssljs)$/, loader:" file-loader" } }, // ...
webpack-dev-server
-
webpack- dev-server 是 webpack 官方提供的一个小型 Express 服务器。使用它可以为 webpack 打包生成的资源文件提供 web 服务。
-
webpack- dev-server 主要提供两个功能:
-
1.为静态文件提供 web 服务
-
2.自动刷新和热替换(HMR)
-
安装
npm install --save-dev webpack-dev-serve
-
配置 webpack.config.js 文件
devServer: l host: '127.0.0.1', port: 8080, progress: true index:'index.html', contentBase:path.resolve( dirname, 'dist') ],
-
运行 webpack- dev-server
npx webpck-dev-server
性能优化
提取 CSS 到单独文件
-
mini-css- extract plugin 可以将打包的 css 提取到一个单独的文件中
-
安装
npm install --save-dev mini-css-extract- plugin
-
打包配置
module.exports = l module:( rules:[ test: /.css$/, use:[MiniCssExtractPlugin.loader," css-loader"] ] plugins: [ new MiniCssExtractPlugin(l filename: 'css/style.css' //tJE68S )) 11..
-
结果
Postcss
-
是一个用 JavaScript 工具和插件转换 CSS 代码的工具,将最新的 CSS 语法转换成大多数浏览器都能理解的语法是一个用 JavaScript 工具和插件转换 CSS 代码的工具
-
安装
npm install--save-dev postcss-loader postcss
-
在入口文件引入 css
improt "file.css";
-
配置
test: .css$/, use:[ //'style-loader', MiniCssExtractPlugin.loader, 'css-loader', loader: 'postcss-loader', options: l postcssOptions: l plugins: ['postcss-preset-env']
-
在 package.json 设置支持哪些浏览器,必须设置支持的 浏览器才会自动添加浏览器兼容
"browserslist": ( 'development": [ "notie <= 8", "last 2 versions", '>1%" "iOS >= 7", ' Android >= 4.0" production": [ not ie <= 8" "last 2 versions" "> 1%", "iOS >= 7", "Android >= 4.0"
压缩 css
-
csS-minimizer-webpack plugin 插件可以实现对 css 的压缩
-
安装
npm install csS-minimizer-webpack plugin --save-dev
-
配置
module.exports = [ module: f loaders: [ test: /.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] ], ], ], plugins: [ new MiniCssExtractPlugin(l filename: 'css/build.css' 1), new CssMinimizerPlugin) ], );
babel
-
虽然 webpack 可以打包 js 文件,但是一些高级语法是无法识别的,因此需要使用第三方工具 babel-loader,高级,js 语言变成低级语言
-
安装
npm install --save-dev babel-loader @babel/core @babel/ preset-env
-
配置
module: l rules:[ test: /.js$/, exclude: /node modules/, use: 1 loader: 'babel-loader', options: l presets: [' @babel/preset-env'] ]
HMR(热替换)
-
HMR 即模块热替换(hot module replacement)的简称,它可以在应用运行的时候,不需要刷新页面,就可以直接替换
-
启用热替换,只需要在 webpack dev-server 添加以下配置
devServer: 1 contentBase: './dist', hot: true, ],
SourceMap
-
SourceMap 是一种映射关系。当项目运行后,如果出现错误,错误信息只能定位到打包后文件中错误的位置。如果想查看在源文件中错误的位置,则需要使用映射系,找到对应的位置
module.exports = [ devtool: 'none', 11 SourceMap entry: './src/index.js', output: [ filename: 'bundle.js', path: path.resolve( dirname, 'dist') 1/ X143
SourceMap 参数
- source-map
- 会生成 map 格式的文件,里面包含映射关系的错误代码准确信息和源代码的错误位置
devtool: 'source-map'
- inline-source-map
- 不会生成 map 格式的文件,包含映射关系的错误代码准确信息和源代码的错误位置
devtool: 'inline-source-map'
- inline-cheap-source-map
- 不生成 map 格式的文件,会映射错误代码准确信息和源代码的错误位置,只能精确的行
devtool: 'inline-cheap-source-map'
- inline-cheap-module-source-map
- module 会映射 loader 和第三方库
devtool: 'inline cheap-module- source-map'
多入口文件
-
当打包的过程中如果需要有多个入口文件,可以写为
entry: l app: './src/app.js', search: './src/search.js', ], output: l filename: '[name].js', path: dirname + '/dist', ],
-
在 html 中引入的时候,可以每个 html 文件引入其中的一个
new HtmlWebpackPlugin(f template: './src/index.html', filename: 'app.html', chunks: ['app'] ]), new HtmlWebpackPlugin(l template: './src/index.html', filename: 'search.html', chunks: ['search'] 1),
HMR(模块热替换)
- 模块热替换(Hot Module Replacement 或 HMR)是 webpack 提供的最有用的功能之- ,它允许在运行时更新各种模块,而无需进行完全刷新。
- 例如入口文件引入了 print.js,现在修改 print.js 里面的内容,使用 HMR 就可以只更新 print.js 里面的内容而不用重新加在整个页面。
启用 HMR
-
启用这个功能很简答,只需要修改一下配置文件, 使用 webpack 内置启的 HMR 插件就可以了
-
并给 webpack- dev-server 添加 hot 为 true 即可
1/5I webpack const webpack = require('webpack'); 1/68 webpack PTÉ HMRJ314 new webpack.HotModuleReplacementPlugin0 devServer:( hot: true I/FEHMR ]
启动 HMR
- 注意:从 webpack5 开始,需要添加属性
target: 'web'
watch
-
webpack 可以监听文件变化,当它们修改后会重新编译。这个页面介绍了如何启用这个功能,以及当 watch 无法正常运行的时候你可以做的一些调整。
watch: true, watchOptions: i aggregateTimeout: 200, poll: 1000, ],
缓存
-
使用 webpack 来打包我们的模块化后的应用程序,webpack 会生成一个可部署的/dist 目录,然后把打包后的内容放置在此目录中。只要/dist 目录中的内容部署到 server.上,client (通常是浏览器)就能够访问此 server 的网站及其资源。而最后一步获取资源是比较耗费时间的,这就是为什么浏览器使用一种名为缓存的技术。可以通过命中缓存,以降低网络流量,使网站加载速度更快
-
webpack 提供了-种使用称为 substitution(可替换模板字符串)的方式, 通过带括号字符串来模板化文件名。其中,[contenthash] substitution 将根据资源内容创建出唯- - hash.当资源内容发生变化时, [contenthash]也会发生变化。
output:( filename: '[name].[contenthash].js', path: path.resolve( dirname, 'dist'), clean: true,
Tree shaking
- tree shaking 是一个术语,通常用于描述移除 JavaScript 上下文中的未引用代码(dead-code)。它依赖于 ES2015 模块语法的静态结构特性,例如 import 和 export。必须使用 ES6 的模块化,同时开启生产环境。
- 在项目的 package.json 文件中,添加”sideEffects”属性
- 如果所有代码都不包含 side effect,我们就可以简单地将该属性标记为 false,来告知 webpack,它可以安全地删除未用到的 export。
跨域
-
通过 webpack- dev-server 可以设置跨域的问题
-
使用 express 创建 web 服务器,并添加路由
-
const express=require( express') const app = express(); app.get('/api/user' ,(req,res)=>[ res.json([name: 'itpEfLtx')); ]); app.listen(8080);
-
配置跨域
devServer: l proxy: i '/api': i target: 'http://127.0.0.1:8080', ],
-
入口文件发送请求
const xhr = new XMLHttpRequest(); xhr.open('get','/api/users',true); xhr.onload = function() [ console.log(xhr.response); ] xhr.send();
dlI 动态资源库
-
在用 Webpack 打包的时候,对于一-些不经常更新的第三方库,比如 jquery, vue, vuex,我们希望能和自己的代码分离开。
-
对于这种方式优化的项目,一般有两个配置文件,分别是:
-
webpack.config.js
-
webpack dll.config.js
-
新建 webpack.dll.config.js
module.exports = { entry:{ jquery: [jquery'] output: { filename: '[name]js', path: path.resolve( dirname,'ll), library: '[name]_ [hash]'//打包后往外暴 露的内容名字 plugins: [ //打包生成一个manifest.json, 提供和jquery映射 new webpack.DllPlugin({ name: '[name]_ [hash]', //映射库的暴露的内容名字 path: path.resolve( _dirname, *dll/manifest.json") //输出的文件路径 }) ]
-
运行打包命令 npx webpack.dll.configjs
-
会生成 dIl 目录,并出现打包后的文件
webpack.config.jst, #iwebpackp5J, AJE new webpack.DllReferencePlugin(f manifest: path.resolve(_ dirname, dl/manifest.json') ))
-
当在入口 l 文件中引入文件,就会自动寻找打包后的资源
import $ from 'jquery' console.log($);
打包 vue
搭建 vue 开发环境
-
使用 webpack 搭建 vue 开发环境
-
安装所需要的包
npm install vue-loader vue-template-compiler --save-dev
npm install vue --save
-
配置文件
const VueLoaderPlugin = require('vue-loader/lib/plugin'); module.exports =l 11... module:( rules:[ 11 ... test: /.vue$/, loader: 'vue-loader' ], ), plugins: [ new HtmlWebpackPlugin(l template: './src/index.html', filename: 'index.html' 1), new VueLoaderPlugin0 //new-↑T19J
-
入口文件引入 vue,创建 vue 实例
import Vue from 'vue'; import App from './App.vue'; new Vue(l el: '#app' render:h => h(App)
处理 CSS
-
vue-style-loader 在安装 vue-loader 自动安装,不需要单独安装
test: /.css$/, use: ['vue-style-loader','css-loader']
处理 scss
-
需要先安装 sass-loader 和 node-sass
test: /.css$/, use: ['vue-style-loader','css-loader','sas-loader']
其它
- 安装 webpack-dev-server,配置服务器,添加热更新
- 安装 vue-router,配置路由
- 安装 axios、vue-axios, 发送 ajax 请求
- 跨域
打包Typescript
初始化项目
npm init -y
安装依赖包
npm install -D typescript webpack webpack-cli ts-loader webpack-dev-server
创建typescript配置文件
tsc --init
创建webpack配置文件,根目录 创建文件webpack.config.js
,文件夹src,public
webpack.config.js
const path = require("path"); //引入path模块
module.exports = {
entry: "./src/index.ts", //入口文件
output: {
filename: "app.js", //输出文件名
path: path.resolve(__dirname, "dist"), //输出文件路径
publicPath: "/dist/", //dev去内存获取数据的公共路径
},
module: {
rules: [
{
test: /\.tsx?$/, //ts或tsx文件结束的文件,
use: "ts-loader", //使用ts-loader
exclude: /node_modules/, //排除node_modules文件夹
},
],
},
};
package.json配置
{
"name": "webpack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "webpack-dev-server --mode=development ",
"build": "webpack --mode=production ",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"ts-loader": "^9.5.1",
"typescript": "^5.3.3",
"webpack": "^5.90.3",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^5.0.2"
}
}
文件目录
模块化处理
tsconfig.json更改模块
{
"compilerOptions": {
"target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
"module": "es6" /* Specify what module code is generated. */,
"esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
"strict": true /* Enable all strict type-checking options. */,
"skipLibCheck": true /* Skip type checking all .d.ts files. */
}
}
src下新建user.ts
import { name, RH } from "./user";
console.log(name);
console.log(RH.host);
index.ts
export const name:string="Ronhai"
export namespace RH{
export const host:string='www.tanghailong.com';
}
会报以下错误
打包配置更改
webpack.config.js
新增以下配置
resolve: {
extensions: [".tsx", ".ts", ".js"], //配置解析文件的后缀名
},
vue 构建工具-vite
vite 简介
-
Vite;是 Vue 的作者尤雨溪开发的 Web 开发构建工具,它是一个基于浏览器原生 ES 模块导入的开发服务器,在开发环境下,利用浏览器去解析 import,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随启随用。
-
Vite 具有以下特点: 快速的冷启动
即时热模块更新(HMR, Hot Module Replacement)
真正按需编译
-
Vite 是在推出 Vue 3 的时候开发的,目前仅支持 Vue 3.x, 这意味着与 Vue 3 不兼容的库也不能与 Vite- 起使用。
使用 vite
-
与 Vue CLI 类似,Vite 也提供用 npm 或者 yarn 来生成项目结构的方式。选择一个目录,打开命令提示窗口,依次执行下面的命令构建脚手架项目,并启动项目。
npm init vite-app < project-name> cd <project-name> npm install npm run dev
-
例如创建的项目加 myvite,执行完命令以后如下图
-
在浏览器下打开 http://localhost:3000,运行结果为
vite 中使用 TypeScript
-
在 vue 组件中 script 的 script 加入 lang=‘ts’即可
<script lang="ts">//..any</script>
json 的使用
-
在组件中直接引入 json 文件,会被自动解析为对象 stu.json 文件
'name": "webthl", website": " www.pythl.com"
-
引入
import data from './assets/stu.json' export default l name: 'App', //... mounted()l console.log(data.name)
scss 的使用
-
想要使用 scss 需要先安装响应的包
npm install sass --save-dev
-
在组件的 style 标签中加入 lang= “scss”
<style lang-' 'scss" > $color: green; h1[ color: $color; </style>
jsx 的使用
-
Vite 对 JSX 也是可以支持的,JSX 最早应该是 React 时候接触到的,这里我们看看如何在 Vue3 里进行使用。
-
直接在 src 目录中,新建一个 App.jsx 文件, 写- -段支持 JSX 的代码。
function App() l return < div> <h1>web前端</h1> </div> export default Аpp;
-
再修改 main.js 中的 import 代码,去掉原来对 App.vue 的引用,加入对 App.jsx 的引用就可以了。
import l createApp ] from 'vue' 11 import App from './App.vue' import App from './App.jsx ' import './index.css' createApp(App).mount(' #app')