一、gitHub 创建项目Projects
兄台过于简单不再赘述
二、拉取项目
- 找一个目录
- 打开终端
- git clone {项目克隆地址}
- 切入项目 cd Projects
三、初始化项目
- 造一个自己本地分支
git checkout -b code-wly-mac
##名字自己整
- 初始化项目
npm init
## 想配就配,不想就一路回车,管不到你们
- 安装Vue3(这个不要用官方的方法,咱是要配置Webpack滴)
yarn add vue
##我习惯用yarn,npm也行,管不到
- 安装typescript
yarn add typescript
- 安装Webpack套装(不解释套装)
yarn add webpack webpack-cli webpack-dev-server webpack-merge -D
- 创建build目录,和相关文件
biu:这个目录存放webpack配置文件
|Projects
-build //webpack配置文件
-webpack.base.js //基础配置,公用部分
-webpack.prod.js //发布环境配置
-webpack.dev.js //生产环境配置
-/build
-package.json
yarn.lock
|Projects
7.配置webpack.base.js,基础配置
安装依赖
yarn add html-webpack-plugin css-loader less-loader text-loader file-loader thread-loader mini-css-extract-plugin -D
yarn add vue-loader@next @vue/compiler-sfc @babel/preset-env @vue/cli-plugin-babel @babel/preset-typescript babel-loader @babel/core -D
配置
//webpack.base.js
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const path = require("path");
const resolve = (dir) => path.resolve(__dirname, dir);
module.exports = {
entry: "./src/main.ts", //配置入口文件
plugins: [
new HtmlWebpackPlugin({
//生成入口HTML文件
template: "./index.html",
filename: "index.html",
}),
new MiniCssExtractPlugin({
//提取css到单独的文件中
filename: "[name].css",
chunkFilename: "css/chunk.[name].css",
ignoreOrder: true,
}),
],
module: {
rules: [
//处理css 文件
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
//处理less文件
{
test: /\.less$/,
use: [MiniCssExtractPlugin.loader, "less-loader", "css-loader"],
},
//处理vue文件
{
test: /\.vue$/,
use: [
{
loader: "vue-loader",
options: {
cssModules: {
localIdentName: "[path][name]---[local]---[hash:base64:5]",
camelCase: true,
},
},
},
],
},
//处理ts,tsx,js文件
{
test: /\.(js|ts|tsx)$/,
exclude:
/(node_modules|scripts[\\/]libs|geojson[\\/]new|share[\\/]libs|scripts\\i18n\\index)/,
use: [
"thread-loader",
{
loader: "babel-loader",
options: {
rootMode: "upward",
cacheDirectory: true,
},
},
],
},
//处理html
{
test: /\.html$/,
use: [{ loader: "text-loader" }],
},
//处理图片
{
test: /\.(png|jpe?g|gif|svg|ico)(\?.*)?$/i,
use: [
{
loader: "url-loader",
options: {
name: "[path][name].[ext]",
limit: 64,
outputPath: "images",
},
},
],
},
//处理其他文件
{
test: /\.(woff2?|eot|ttf|otf|mtl|obj)(\?.*)?$/i,
use: [
{
loader: "file-loader",
options: {
name: "[path][name].[ext]",
outputPath: "font",
},
},
],
},
],
},
resolve: {
alias: {
//别名配置
"@": resolve("../src"),
src: resolve("../src"),
components: resolve("../src/components"),
router: resolve("../src/router"),
store: resolve("../src/store"),
views: resolve("../src/views"),
apis: resolve("../src/apis"),
},
extensions: [".tsx", ".ts", ".wasm", ".mjs", ".js", ".json"],
},
};
- 配置babel
根目录创建babel.config.js
|Projects
-build //webpack配置文件
-webpack.base.js //基础配置,公用部分
-webpack.prod.js //发布环境配置
-webpack.dev.js //生产环境配置
-/build
-babel.config.js
-package.json
yarn.lock
|Projects
配置
//babel.config.js
module.exports = {
presets: [
[
"@babel/preset-env",
{
targets: {
browsers: ["last 1 version"],
},
exclude: ["transform-async-to-generator", "transform-regenerator"],
},
],
["@vue/cli-plugin-babel/preset"],
["@babel/preset-typescript"],
],
};
- 配置webpack.dev.js
//webpack.dev.js
const common = require("./webpack.base");
const { merge } = require("webpack-merge");
module.exports = merge(common, {
devtool: "inline-source-map", //控制台调试代码
mode: "development", //开发环境webpack内置优化
devServer: {
client: {
progress: true,
},
compress: true, //gzip压缩
hot: true, //热更新
// open: true, //自动打开默认浏览器
open: {
app: {
name: "goole-chrome", //走动打开chrome
arguments: ["--incognito", "--new-window"], //无痕,新的窗口
},
},
port: 8081, //监听端口
proxy: {}, //代理配置
},
});
- 配置webpack.prod.js
//webpack.prod.js
const common = require("./webpack.base");
const { merge } = require("webpack-merge");
const path = require("path");
module.exports = merge(common, {
mode: "production",
output: {
//出口
path: path.resolve(__dirname, "../dist"), //输出路径
clean: true, //清空打包文件
filename: "js/[name].[chunkhash].js", //输出文件名
chunkFilename: "js/[name].[chunkhash].js", //输出异步文件文件名
},
});
- 配置启动命令
//package.json
{
...
"scripts": {
"start": "npm run dev",
"dev": "webpack-dev-server --hot --open --config build/webpack.dev.js",
"build": "webpack --config build/webpack.prod.js"
},
...
}
- 根目录创建index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Projects</title>
</head>
<body>
<div id="app"></div>
</body>
</html>
- 根目录创建src目录,以及相关文件
创建src目录
src目录下创建App.tsx
import { defineComponent, ref } from "vue";
export default defineComponent({
name: "App",
setup() {
const title = ref<string>("Hello Projects!");
const auther: string = "Code Wly";
return () => (
<>
<div class="app">{title.value}</div>
<div class="auth">auther:{auther}</div>
</>
);
},
});
src目录下创建main.ts
import { createApp } from "vue";
import App from "./App";
const app = createApp(App);
app.mount("#app");
src目录下创建shims-vue.d.ts
biu:shims-vue.d.ts是为了 typescript 做的适配定义文件,因为.vue 文件不是一个常规的文件类型,ts 是不能理解 vue 文件是干嘛的,加这一段是是告诉 ts,vue 文件是这种类型的。
declare module "*.vue" {
import type { DefineComponent } from "vue";
const component: DefineComponent<{}, {}, any>;
export default component;
}
declare module "*.svg" {
const centent: string;
export default centent;
}
- 根目录创建tsconfig.json文件
{
"include": ["src"],
"exclude": ["node_modules", "dist", "assets/"],
"compilerOptions": {
"jsx": "preserve",
"jsxFactory": "h",
"strictNullChecks": true,
"allowJs": true,
"moduleResolution": "node",
"isolatedModules": false,
"lib": ["dom", "es5", "es6", "es7", "es2015.promise"],
"sourceMap": true,
"pretty": true,
"typeRoots": [
"src/globalDeclare"
],
"target": "ES5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */,
"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
"checkJs": false /* Report errors in .js files. */,
"downlevelIteration": true /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */,
"strict": false /* Enable all strict type-checking options. */,
"baseUrl": "./" /* Base directory to resolve non-absolute module names. */,
"paths": {
"@/*": ["src/*"],
"src/*": ["src/*"],
"apis/*": ["src/apis/*"],
"components/*": ["src/components/*"],
"config/*": ["src/config/*"],
"hook/*": ["src/hook/*"],
"router/*": ["src/router/*"],
"store/*": ["src/store/*"],
"theme/*": ["src/theme/*"],
"util/*": ["src/util/*"],
"views/*": ["src/views/*"],
},
"allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */,
"esModuleInterop": true,
"experimentalDecorators": true /* Enables experimental support for ES7 decorators. */,
"emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */,
"resolveJsonModule": true
},
}
- 配置.gitignore
这个是git忽略的文件
.DS_Store
.history
node_modules
/dist
package-lock.json
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
四、最终目录结构
..
-build
-webpack.base.js //基础配置,公用部分
-webpack.prod.js //发布环境配置
-webpack.dev.js //生产环境配置
-/build
-/src
-index.tsx //入口文件
shims-vue.d.ts //解决 vue 类型报错
-src
-index.html //模板
-tsconfig.json //ts配置
-babel.config.js //babel配置
-package.json //package相关配置
-yarn.lock 或者 package.lock.json //依赖锁
-node_modules //node包
-.gitignore
..
五、启动
yarn start
六、上传到远程仓库
git add .
git commit -m "init:初始化项目"
git push --set-upstream origin code-wly-mac -u
七、合并到主分支
到了最后就去github自己合并到主分支,不谢!
gitHub地址github.com/myselfwly/P…