TypeScript基础篇 - Vue-TS-Webpack 环境实战

目录

[Webpack+Vue+TS 环境配置](#Webpack+Vue+TS 环境配置)

scripts/webpack.config.js

src/Hello.tsx

src/SfcDemo.vue

src/main.tsx

src/shims-vue.d.ts

package.json


Webpack+Vue+TS 环境配置

scripts/webpack.config.js

javascript 复制代码
const path = require('path')
// 安装插件 npm install webpack webpack-cli @babel/core @babel/preset-env @babel/preset-typescript
// 安装vue3 npm install vue@next 
// 安装vue3对应的vue-loader // npm install vue-loader@next 
// 安装 npm install babel-loader -D
// npm install @vue/compiler-sfc -D // 用于编译文件组件用的
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')
module.exports = {
  entry: path.resolve(__dirname, "../src/main.tsx"),  // 入口文件
  mode: "development", // 开发模式
  module: {
    rules: [// 转义规则
      {
        test: /\.tsx?$/,
        loader: 'babel-loader',
        options: {
          presets: [
            "@babel/preset-env", // 转义es
            "@babel/preset-typescript"// 转义ts
          ],
          plugins: [
            "@vue/babel-plugin-jsx" // 用于转义vue jsx
          ],
        },
        // 排除
        exclude: /node_modules/
      },
      {
        // .vue的文件
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
  resolve: { // import支持的扩展名
    extensions: [".tsx", ".ts", ".js", '.vue']
  },
  output: {// 打包后信息配置
    filename: 'bundle.js',
    path: path.resolve(__dirname, "../build")
  },
  devServer: {
    static: {// 打包静态文件配置
      directory: path.resolve(__dirname, "../build"),
    },
    port: 3020// 端口
  },
  plugins: [
    new HtmlWebpackPlugin({// 生成html文件模板
      template: path.resolve(__dirname, '../template.html')
    }),
    new VueLoaderPlugin()
  ]
}

src/Hello.tsx

javascript 复制代码
export default () => {
  return <div>Hello JSX</div>
}

src/SfcDemo.vue

html 复制代码
<template>
<div>Hello SFC</div>
</template>
<script>
export default {
  setup(){
    return {
    }
  }
}
</script>
<style>
</style>

src/main.tsx

javascript 复制代码
import { createApp } from 'vue'
// 让ts认.vue;需要一个垫片文件shims-vue.d.ts
import SfcDemo from './SfcDemo.vue'
import Hello from './Hello'
const App = () => {
  return <div>
    <SfcDemo />
    <Hello />
  </div>
}
createApp(App).mount("#root")

src/shims-vue.d.ts

javascript 复制代码
declare module '*.vue' { // 告诉ts 按【vue-component】 按下面的类型执行
  import { DefineComponent } from 'vue'
  const component: DefineComponent<{}, {}, any>
  export default component
}

package.json

javascript 复制代码
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config scripts/webpack.config.js",
    "serve": "webpack serve --config scripts/webpack.config.js"
  },
相关推荐
Bug收容所31 分钟前
Vue+JS Day3
前端·javascript·vue.js·前端框架·1024程序员节
iDao技术魔方35 分钟前
Bun v1.4.4 实战:用 bun fmt 替掉 prettier 的 5 个步骤
typescript·1024程序员节
梅雅达编程笔记1 小时前
Day 17 | uni-app 小程序:前端从零搭建
微信小程序·typescript·uni-app·vue3·pinia·前端开发·全栈
康小旺15 小时前
TypeScript 编译器开始卷 Rust 了:Cloudflare 的 tsrs 到底想干嘛?
rust·typescript
用户831348593069819 小时前
Vue3 v-for:常用用法与开发高频坑点
前端·javascript·vue.js
nyaomaru1 天前
is-kit 达成 100 Stars ⭐🎉 从 50 到 100,发生了什么?
前端·typescript
林恒smileZAZ1 天前
用 Vue 3 + Electron 做桌宠:从启动退出到拖拽、单击与鼠标穿透
vue.js·electron·计算机外设
软件技术NINI1 天前
基于JavaWeb 汽车租聘
java·vue.js·spring boot·后端·python·毕业设计·毕设
2301_32241428041 天前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
酷炫码神2 天前
Day 8|Vue3 响应式:告别手动操作 DOM,让数据驱动界面
javascript·vue.js·ecmascript