当前位置: 首页 > news >正文

第二十章 TypeScript(webpack构建ts+vue3项目)

构建项目目录

  • src
  • -- main.ts
  • -- App.vue
  • --shim.d.ts
  • webpack.config.js
  • index.html
  • package.json
  • tsconfig.json

基础构建 

npm install webpack -D
npm install webpack-dev-server -D
npm install webpack-cli -D

package.json 添加打包命令和 启动服务的命令

{"scripts": {"build": "webpack","dev": "webpack-dev-server"}
}

编写webpack.config.js 配置文件测试打包

const { Configuration } = require('webpack')
const path  = require('path')
/*** @type {Configuration}*/
const config = {mode:"development", //开发模式entry:'./src/main.ts', //入口output:{path: path.resolve(__dirname, 'dist'), //出口目录filename: 'main.js', //出口文件}
}module.exports = config

tsconfig.json 增加配置项

  "include": ["src/**/*"]

运行npm run build 打包成功

支持TypeScript 

增加依赖

npm install ts-loader -D
npm install typescript -D
const { Configuration } = require('webpack')
const path = require('path')
/*** @type {Configuration}*/
const config = {mode: "development",entry: './src/main.ts',output: {path: path.resolve(__dirname, 'dist'),filename: 'main.js',},module: {rules: [{test: /\.ts$/,use: 'ts-loader' //支持解析ts文件}]}
}module.exports = config

支持vue

安装依赖

npm install vue-laoder -D
npm install html-webpack-plugin -D

main.ts 引入Vue

import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')

让ts识别.vue后缀

declare module "*.vue" {import { DefineComponent } from "vue"const component: DefineComponent<{}, {}, any>export default component
}

初始化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><div id="app"></div>
</body>
</html>

增加vue-loader 和 插件

const { Configuration } = require('webpack')
const { VueLoaderPlugin } = require('vue-loader')
const HtmlWepackPlugin = require('html-webpack-plugin')
const path = require('path')
/*** @type {Configuration}*/
const config = {mode: "development",entry: './src/main.ts',output: {path: path.resolve(__dirname, 'dist'),filename: 'main.js',},stats: 'errors-only',plugins: [new VueLoaderPlugin(),new HtmlWepackPlugin({template: './index.html'})],module: {rules: [{test: /\.ts$/,use:{loader: 'ts-loader',options:{appendTsSuffixTo: [/\.vue$/]}}},{test: /\.vue$/,use: 'vue-loader'}]}
}module.exports = config

支持css + less

安装依赖

npm install css-loader style-loader less less-loader -D
const { Configuration } = require('webpack')
const { VueLoaderPlugin } = require('vue-loader')
const HtmlWepackPlugin = require('html-webpack-plugin')
const path = require('path')
/*** @type {Configuration}*/
const config = {mode: "development",entry: './src/main.ts',output: {path: path.resolve(__dirname, 'dist'),filename: 'main.js',},stats: 'errors-only',plugins: [new VueLoaderPlugin(),new HtmlWepackPlugin({template: './index.html'})],module: {rules: [{test: /\.ts$/,use:{loader: 'ts-loader',options:{appendTsSuffixTo: [/\.vue$/]}}},{test: /\.vue$/,use: 'vue-loader'},{test: /\.css$/,use: ['style-loader', 'css-loader'] //从右向左解析},{test: /\.less$/,use: ['style-loader', 'css-loader', 'less-loader']}]}
}module.exports = config

代码分包

性能优化 默认把所有代码打包到一个js文件体积太大了我们可以进行代码分包减少体积

const { Configuration } = require('webpack')
const { VueLoaderPlugin } = require('vue-loader')
const HtmlWepackPlugin = require('html-webpack-plugin')
const path = require('path')
/*** @type {Configuration}*/
const config = {mode: "development",entry: './src/main.ts',output: {path: path.resolve(__dirname, 'dist'),filename: '[chunkhash].js',clean: true},stats: 'errors-only',plugins: [new VueLoaderPlugin(),new HtmlWepackPlugin({template: './index.html'})],optimization: {splitChunks: {cacheGroups: {moment: {name: "moment",test: /[\\/]node_modules[\\/]moment[\\/]/,chunks: "all"},common:{name: "common",chunks: "all",minChunks: 2}}}},module: {rules: [{test: /\.ts$/,use: {loader: 'ts-loader',options: {appendTsSuffixTo: [/\.vue$/]}}},{test: /\.vue$/,use: 'vue-loader'},{test: /\.css$/,use: ['style-loader', 'css-loader'] //从右向左解析},{test: /\.less$/,use: ['style-loader', 'css-loader', 'less-loader']}]}
}module.exports = config

单独提取css

目前是通过js动态插入style标签的方式进行的,但是我们希望通过link标签引入

安装依赖

npm install mini-css-extract-plugin -D
const { Configuration } = require('webpack')
const { VueLoaderPlugin } = require('vue-loader')
const HtmlWepackPlugin = require('html-webpack-plugin')
const MimiCssExtractPlugin = require('mini-css-extract-plugin')
const path = require('path')
/*** @type {Configuration}*/
const config = {mode: "development",entry: './src/main.ts',output: {path: path.resolve(__dirname, 'dist'),filename: '[chunkhash].js',clean: true},stats: 'errors-only',plugins: [new VueLoaderPlugin(),new HtmlWepackPlugin({template: './index.html'}),new MimiCssExtractPlugin()],optimization: {splitChunks: {cacheGroups: {moment: {name: "moment",test: /[\\/]node_modules[\\/]moment[\\/]/,chunks: "all"},common:{name: "common",chunks: "all",minChunks: 2}}}},module: {rules: [{test: /\.ts$/,use: {loader: 'ts-loader',options: {appendTsSuffixTo: [/\.vue$/]}}},{test: /\.vue$/,use: 'vue-loader'},{test: /\.css$/,use: [MimiCssExtractPlugin.loader, 'css-loader'] //从右向左解析},{test: /\.less$/,use: [MimiCssExtractPlugin.loader, 'css-loader', 'less-loader']}]}
}module.exports = config

http://www.lryc.cn/news/324964.html

相关文章:

  • 白酒:陈酿过程中的老熟度评价与品质提升方法
  • BoostSeacher
  • 我的算法刷题笔记(3.18-3.22)
  • 初探Ruby编程语言
  • 深圳MES系统如何提高生产效率
  • QT常见Layout布局器使用
  • Elasticsearch8 - Docker安装Elasticsearch8.12.2
  • 还在为不知道怎么学习网络安全而烦恼吗?这篇文带你从入门级开始学习网络安全—认识网络安全
  • DFS基础——迷宫
  • iOS开发进阶(九):OC混合开发嵌套H5应用并互相通信
  • 新人应该从哪几个方面掌握大数据测试?
  • linux debian运行pip报错ssl tsl module in Python is not available
  • 宝塔设置限制ip后,ip改了之后 ,登陆不上了
  • 解锁新功能,Dynadot现支持BITPAY平台虚拟货币
  • Android下的Touch事件分发详解
  • uniapp的配置文件、入口文件、主组件、页面管理部分
  • B端设计:如何让UI组件库成为助力,而不是阻力。
  • 敏捷开发最佳实践:学习与改进维度实践案例之会诊式培养敏捷教练
  • C#宿舍信息管理系统
  • 测试环境搭建整套大数据系统(十三:设置开机自启动)
  • 算法练习第三十二天|122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
  • nodejs+vue反诈科普平台的设计与实现pythonflask-django-php
  • SpringBoot3+JPA+MySQL实现多数据源的读写分离(基于EntityManagerFactory)
  • 10万+SRC高质量稀有明星人脸素材唐嫣杨紫金晨倪妮蔡卓妍张雨绮合集
  • 目标检测中的mAP计算原理和源码实现
  • Unity 粒子在UI中使用时需要注意的地方
  • 了解Spring:Java开发的利器
  • 【Hive】with 语法 vs cache table 语法
  • CleanMyMac X 4.15.1 for Mac 最新中文破解版 系统优化垃圾清理工具
  • 查看Linux系统重启的四种基本命令