概述
本文为一个搭建vue3+ts+less+webpack项目的一个笔记向的文章,记录了各种一个vue项目搭建的最基本的开发配置。
依赖
node版本为v18.20.2
npm版本10.5.0
初始化git本地仓库与package.json文件
新建文件夹并且初始化git仓库,创建.gitignore文件
注意这几行命令无法在cmd中运行,只能在powershell和linux的终端环境中运行
| 12
 3
 4
 5
 6
 
 | mkdir your_project_name #创建项目目录cd your_project_name #进入项目目录
 git init #创建本地git仓库
 echo '/node_modules' >> .gitignore #将node_modules写入该忽略文件
 npm init -y
 #tsc --init
 
 | 
开发时依赖
项目开发需要使用到各种工具,分为开发时依赖,运行时依赖。
这里说一下这两个依赖的区别,像webpack,当项目部署上线的时候,部署的是js、css、html、图片等文件,webpack只是我们构建项目的一个工具。所以他被归类到开发时的依赖。
还有ts,给开发过程中的程序员提供了强大的静态类型检查与更多的语法扩展功能。经过webpack构建之后还是js文件,所以也被归类到开发时依赖。
但是像vue、lodash、moment、这些属于我们真实代码里面要写逻辑的,就是运行时依赖,最后会被打包到构建的产物当中的。
所以在装工具的时候记得区分一下
比如现在我需要安装webpack,需要在install命令后跟上一个-D
| 12
 3
 
 | npm install webpack -D#为了兼容低版本的包管理工具,可以使用下面这条指令
 # npm install webpack --save-dev
 
 | 
实际上就是–save-dev命令的一个缩写,npm版本>=5.0.0可以直接加个-D即可
运行时依赖比如vue就不需要-D参数,正常安装即可
基础模板开发时依赖如下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | webpack #这个不说了webpack-dev-server #为我们创建开发服务器,不然你会等待webpack打包完了之后通过构建的文件进行debug吗?
 ts-loader #ts的加载器
 vue-loader #webpack可不认.vue文件
 webpack-cli #webpack的命令行工具,可以把webpack理解成一个软件,cli就是操作这个软件的摇杆
 #处理css文件
 css-loader
 style-loader
 html-webpack-plugin #处理html文件
 # css增强,这两个是可选的,可以根据团队需求去变更所使用的css预编译器比如sass
 less
 less-loader
 mini-css-extract-plugin #从模板里面分割css代码到单独的文件夹,并且通过link标签的方式引入
 
 | 
package.json
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | {"scripts": {
 "build": "webpack --mode production",
 "dev": "webpack serve --mode=development"
 },
 "devDependencies": {
 "@types/lodash": "^4.17.12",
 "css-loader": "^7.1.2",
 "html-webpack-plugin": "^5.6.3",
 "less": "^4.2.0",
 "less-loader": "^12.2.0",
 "mini-css-extract-plugin": "^2.9.1",
 "style-loader": "^4.0.0",
 "ts-loader": "^9.5.1",
 "vue-loader": "^17.4.2",
 "webpack": "^5.95.0",
 "webpack-cli": "^5.1.4",
 "webpack-dev-server": "^5.1.0"
 }
 }
 
 | 
运行时依赖
不过多赘述
| 12
 3
 4
 5
 6
 
 | {"dependencies": {
 "lodash": "^4.17.21",
 "vue": "^3.5.12"
 }
 }
 
 | 
配置文件
webpack的玩法不止这些,还有很多玩法,并且社区还有很多很多插件、loader
webpack.config.js
项目根目录下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 
 | const {Configuration} = require("webpack");const path = require("node:path");
 const HtmlWebpackPlugin = require("html-webpack-plugin");
 const {VueLoaderPlugin} = require("vue-loader");
 const TerserPlugin = require('terser-webpack-plugin');
 const MiniCssExtractPlugin = require("mini-css-extract-plugin");
 
 
 
 
 const config = {
 entry: "./src/main.ts",
 output: {
 path: path.resolve(__dirname, "./dist"),
 filename: "[chunkhash].js",
 clean: true,
 },
 stats: "errors-warnings",
 plugins: [
 new HtmlWebpackPlugin({
 template: "./index.html",
 }),
 new VueLoaderPlugin(),
 new MiniCssExtractPlugin()
 ],
 module: {
 rules: [
 {
 test: /\.ts$/,
 use: {loader: "ts-loader", options: {appendTsSuffixTo: [/\.vue$/]}},
 },
 {test: /\.vue$/, use: "vue-loader"},
 
 {test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"]},
 {test: /\.less$/, use: [MiniCssExtractPlugin.loader, "css-loader", "less-loader"]}
 ],
 },
 optimization: {
 
 
 minimize: true,
 minimizer: [
 new TerserPlugin({
 terserOptions: {
 format: {
 comments: false,
 },
 },
 extractComments: false,
 }),
 ],
 splitChunks: {
 cacheGroups: {
 lodash: {
 name: "lodash",
 chunks: "all",
 test: /[\\/]node_modules[\\/]lodash[\\/]/,
 }
 }
 }
 },
 };
 
 module.exports = config;
 
 | 
vue的ts声明文件
建立于/src目录下
这个声明文件是用来告诉 TypeScript 如何处理 .vue 文件的。由于 Vue 组件文件通常以 .vue 结尾,TypeScript
默认情况下并不认识这种文件类型。通过声明模块,TypeScript 可以正确地识别和处理这些文件。
| 12
 3
 4
 5
 
 | declare module '*.vue' {import {DefineComponent} from "vue";
 const component: DefineComponent<{}, {}, any>;
 export default component;
 }
 
 |