创建TS+Vue环境

前言

在创建创建TS+Vue环境环境之前,执行的npm命名前,需要确保安装了Node.js

一、webpack手动创建TS+Vue环境

1. 初始化创建package.json文件

npm init -y

2. 安装配置插件等

  • 手动安装命令
npm i -D webpack webpack-cli webpack-dev-server
npm i -D typescript ts-loader
npm i -D vue vue-loader vue-template-compiler
npm i -D vue-class-component vue-property-decorator
npm i -S @babel/core @babel/preset-env babel-loader
npm i -S file-loader url-loader
npm i -S css-loader style-loader
npm i -S html-webpack-plugin
  • 或将配置好的package.json文件拷贝进去,执行npm i安装命令即可
    copy时注意项目名字
// package.json
{
  "name": "tsproject1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "node_modules\\.bin\\webpack --mode production",
    "serve": "node_modules\\.bin\\webpack-dev-server"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "ts-loader": "^6.2.2",
    "file-loader": "^3.0.1",
    "url-loader": "^1.1.2",
    "css-loader": "^2.1.1",
    "style-loader": "^0.23.1",
    "vue": "^2.6.10",
    "vue-template-compiler": "^2.6.10",
    "webpack": "^4.42.1",
    "webpack-cli": "^3.3.11"
  },
  "dependencies": {
    "@babel/core": "^7.4.5",
    "@babel/preset-env": "^7.4.5",
    "babel-loader": "^8.1.0",
    "html-webpack-plugin": "^4.0.4",
    "typescript": "^3.8.3",
    "vue-class-component": "^7.2.3",
    "vue-loader": "^15.9.1",
    "vue-property-decorator": "^8.4.1",
    "webpack-dev-server": "^3.10.3"
  }
}

安装命令

npm i

3. 初始化创建tsconfig.json文件,配置

tsc --init
{
  "compilerOptions": {
      "outDir": "./dist/",
      "sourceMap": true,
      "strict": true,
      "module": "es2015",
      "moduleResolution": "node",
      "target": "es5",
      "skipLibCheck": true,
      "esModuleInterop": true,
      "experimentalDecorators": true
  },
  "include": [
      "./src/**/*"
  ],
  "exclude": [
    "./dist/"
  ]
}

4. 创建webpack.congif.js文件,并配置文件

const path = require('path'); //nodejs内置模块
const HtmlWebpackPlugin = require('html-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const resolve = dir => path.resolve(__dirname, dir);
 
module.exports = {
  entry: './src/main.ts',
  output: {
    path: path.resolve(__dirname, 'dist'), // d://webpakc/dist
    filename: 'bundle.js' // d://webpakc/dist/bundle.js
  },
   //本地服务
   devServer: {
    contentBase: path.join(__dirname, "dist"),
    compress: true,
    port: 9000,
    historyApiFallback: true, //不跳转
    inline: true //实时刷新
  },
  resolve: {
    // Add `.ts` and `.tsx` as a resolvable extension.
    extensions: [".ts", ".tsx", ".js",".json",".vue"],
    // 设置别名
    alias: {
      '@': resolve('src') // 这样配置后 @ 可以指向 src 目录
    }
  },
  module: {
    rules: [{
        test: /\.js$/,
        exclude: path.resolve(__dirname, 'node_modules'),
        include: path.resolve(__dirname, 'src'),
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      },
      {
        test: /\.(png|jpg|gif)$/,
        use: [{
          loader: 'url-loader',
          options: {
            limit: 12192
          }
        }]
      },
      {
        test: /\.tsx?$/,
        loader: "ts-loader",
        exclude: /node_modules/,
        options: {
          appendTsSuffixTo: [/\.vue$/],
        }
      },
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
 
  //插件
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: __dirname + "/public/index.html"
    }),
    // 请确保引入这个插件!
    new VueLoaderPlugin()
  ]
};

5. 创建src、public等文件夹,并创建起始文件index.html和main.ts以及App.vue文件

  • inde.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ts+vue项目</title>
</head>
<body>
    <div id="app"></div>
</body>
</html>
  • main.ts
import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App)
}).$mount('#app')

6. ts文件声明

  • 在src目录下创建vue-shims.d.ts文件并配
declare module "*.vue" {
    import Vue from "vue";
    export default Vue;
}
  • App.vue
<template>
    <div>
        <p>ts+vue项目</p>
    </div>
</template>

<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
    
})
</script>

7. 项目目录结构

  • 完成以上操作后,项目目录结构如下


二、vue-cli搭建ts+vue环境项目

1. 在需要创建的目录下出入一下命令

  • vue create 项目名
  • 注意:项目名不能有大写
vue create mytsvue

2. 选择创建的项目环境

  • 这里我们选择Manually select features 自己手动创建,如果之前有自己搭建好的环境,选择对应的搭建好的环境即可


3. 选择安装的部分插件

  • 在这里选择需要安装的一些插件,我们用typescript实现开发,肯定要勾选TypeScript

4.是否使用babel和类样式的组件语法

  • 这里表示的意思是:
    在TypeScript旁边使用Babel(现代模式需要,自动检测填充,传送JSX)?
    使用类样式的组件语法?
    在这里我们暂时都选择的yes

5. 选择scss预处理器

  • 当操作来着这一步时,选择css预处理技术时,最好勾选第一个,因为本人在这里踩过坑,选第二个创建项目会报错


6. 设置配置文件的存放位置

  • 这里的意思是 你更喜欢将Babel, ESLint等的配置放在哪里?这里我选择的是In dedicated config files,放在在专用配置文件中

7.保存预设环境

  • 这里的意思是表示是否将当前创建的环境预设保存,方便在下一次创建项目时快速搭建环境


  • 选择yes后,输入你保存预设环境的名字,下次创建同意环境的项目时,在选择创建的项目环境,就可以根据我们预设的环境去快速安装环境了
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容