国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

vue + typescript 項(xiàng)目起手式

zhisheng / 1562人閱讀

摘要:新項(xiàng)目起手式最后更新于,技術(shù)文具有時效性,請知悉我知道你們早就想用上強(qiáng)類型了還有后續(xù)進(jìn)階篇安裝安裝依賴配置添加添加讓識別改造文件什么是是的強(qiáng)類型版本。是的超集,這意味著他支持所有的語法。與此同時,也是的超集,的也宣布采用進(jìn)行開發(fā)。

vue + typescript 新項(xiàng)目起手式

最后更新于2018-06-30,技術(shù)文具有時效性,請知悉

我知道你們早就想用上 vue + ts 強(qiáng)類型了

還有后續(xù) vue + typescript 進(jìn)階篇

安裝vue-cli

安裝ts依賴

配置 webpack

添加 tsconfig.json

添加 tslint.json

ts 識別 .vue

改造 .vue文件

什么是typescript

TypeScriptJavaScript 的強(qiáng)類型版本。然后在編譯期去掉類型和特有語法,生成純粹的 JavaScript 代碼。由于最終在瀏覽器中運(yùn)行的仍然是 JavaScript,所以 TypeScript 并不依賴于瀏覽器的支持,也并不會帶來兼容性問題。

TypeScriptJavaScript 的超集,這意味著他支持所有的 JavaScript 語法。并在此之上對 JavaScript 添加了一些擴(kuò)展,如 class / interface / module 等。這樣會大大提升代碼的可閱讀性。

與此同時,TypeScript 也是 JavaScript ES6 的超集,GoogleAngular 2.0 也宣布采用 TypeScript 進(jìn)行開發(fā)。這更是充分說明了這是一門面向未來并且腳踏實(shí)地的語言。

強(qiáng)類型語言的優(yōu)勢在于靜態(tài)類型檢查,具體可以參見 http://www.zhihu.com/question... 的回答。概括來說主要包括以下幾點(diǎn):

靜態(tài)類型檢查

IDE 智能提示

代碼重構(gòu)

可讀性

靜態(tài)類型檢查可以避免很多不必要的錯誤, 不用在調(diào)試的時候才發(fā)現(xiàn)問題
前言

隨著vue2.5 更好的 TypeScript 集成,同時因?yàn)樾麻_項(xiàng)目的契機(jī),故準(zhǔn)備動手嘗試一下typescript + vue

都說ts萬般好,不如一個段子來的直觀,一個程序員自從用上了ts之后,連續(xù)寫了3000+行代碼一次編譯通過一氣呵成,然后很激動的打電話跟老婆炫耀這件事情,老婆回了一句

之前看文章或者 demo 一直認(rèn)為 vue + typescript 之后就不能友好的寫.vue單文件,并且我也在各種 live 中問vue + ts 或者 flow的集成,也一直沒有問出什么好的實(shí)踐,但是本上強(qiáng)上ts的念頭,一個字,就是干!

終于決定自己動手,那接下來從 vue-cli 開始配置 ts,看看事實(shí)上集成 ts 的體驗(yàn)到底是如何呢?

先貼一張最后配置完畢的.vue文件 ,template 和 style 跟以前的寫法保持一致,只有 script 的變化

起手vue-cli

這步應(yīng)該不用寫了

Vue 引入 TypeScript

首先Cli之后,接下來需要安裝一些必要/以后需要的插件

安裝vue的官方插件
npm i vue-class-component vue-property-decorator --save

// ts-loader typescript 必須安裝,其他的相信你以后也會裝上的
npm i ts-loader typescript tslint tslint-loader tslint-config-standard --save-dev

這些庫大體的作用,可以按需引入:

vue-class-component:強(qiáng)化 Vue 組件,使用 TypeScript/裝飾器 增強(qiáng) Vue 組件

vue-property-decorator:在 vue-class-component 上增強(qiáng)更多的結(jié)合 Vue 特性的裝飾器

ts-loader:TypeScript 為 Webpack 提供了 ts-loader,其實(shí)就是為了讓webpack識別 .ts .tsx文件

tslint-loader跟tslint:我想你也會在.ts .tsx文件 約束代碼格式(作用等同于eslint)

tslint-config-standard:tslint 配置 standard風(fēng)格的約束

配置 webpack

首先找到./build/webpack.base.conf.js

找到entry.appmain.js 改成 main.ts, 順便把項(xiàng)目文件中的main.js也改成main.ts, 里面內(nèi)容保持不變

entry: {
  app: "./src/main.ts"
}

找到resolve.extensions 里面加上.ts 后綴 (是為了之后引入.ts的時候不寫后綴)

  resolve: {
    extensions: [".js", ".vue", ".json", ".ts"],
    alias: {
      "@": resolve("src")
    }
  }

找到module.rules 添加webpack對.ts的解析

module: {
  rules: [
    {
      test: /.(js|vue)$/,
      loader: "eslint-loader",
      enforce: "pre",
      include: [resolve("src"), resolve("test")],
      options: {
        formatter: require("eslint-friendly-formatter")
      }
    },
// 從這里復(fù)制下面的代碼就可以了
    {
      test: /.ts$/,
      exclude: /node_modules/,
      enforce: "pre",
      loader: "tslint-loader"
    },
    {
      test: /.tsx?$/,
      loader: "ts-loader",
      exclude: /node_modules/,
      options: {
        appendTsSuffixTo: [/.vue$/],
      }
    },
// 復(fù)制以上的
  }
}

是不是加完了,那現(xiàn)在來解釋一下

ts-loader 會檢索當(dāng)前目錄下的 tsconfig.json 文件,根據(jù)里面定義的規(guī)則來解析.ts文件(就跟.babelrc的作用一樣)

tslint-loader 作用等同于 eslint-loader

添加 tsconfig.json

接下來在根路徑下創(chuàng)建tsconfig.json文件

這里有一份參考的 tsconfig.json 配置,完成的配置請點(diǎn)擊 tsconfig.json:

{
  // 編譯選項(xiàng)
  "compilerOptions": {
    // 輸出目錄
    "outDir": "./output",
    // 是否包含可以用于 debug 的 sourceMap
    "sourceMap": true,
    // 以嚴(yán)格模式解析
    "strict": true,
    // 采用的模塊系統(tǒng)
    "module": "esnext",
    // 如何處理模塊
    "moduleResolution": "node",
    // 編譯輸出目標(biāo) ES 版本
    "target": "es5",
    // 允許從沒有設(shè)置默認(rèn)導(dǎo)出的模塊中默認(rèn)導(dǎo)入
    "allowSyntheticDefaultImports": true,
    // 將每個文件作為多帶帶的模塊
    "isolatedModules": false,
    // 啟用裝飾器
    "experimentalDecorators": true,
    // 啟用設(shè)計類型元數(shù)據(jù)(用于反射)
    "emitDecoratorMetadata": true,
    // 在表達(dá)式和聲明上有隱含的any類型時報錯
    "noImplicitAny": false,
    // 不是函數(shù)的所有返回路徑都有返回值時報錯。
    "noImplicitReturns": true,
    // 從 tslib 導(dǎo)入外部幫助庫: 比如__extends,__rest等
    "importHelpers": true,
    // 編譯過程中打印文件名
    "listFiles": true,
    // 移除注釋
    "removeComments": true,
    "suppressImplicitAnyIndexErrors": true,
    // 允許編譯javascript文件
    "allowJs": true,
    // 解析非相對模塊名的基準(zhǔn)目錄
    "baseUrl": "./",
    // 指定特殊模塊的路徑
    "paths": {
      "jquery": [
        "node_modules/jquery/dist/jquery"
      ]
    },
    // 編譯過程中需要引入的庫文件的列表
    "lib": [
      "dom",
      "es2015",
      "es2015.promise"
    ]
  }
}

順便貼一份自己的配置

{
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "node_modules"
  ],
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "experimentalDecorators": true,
    "allowJs": true,
    "module": "esnext",
    "target": "es5",
    "moduleResolution": "node",
    "isolatedModules": true,
    "lib": [
      "dom",
      "es5",
      "es2015.promise"
    ],
    "sourceMap": true,
    "pretty": true
  }
}
添加 tslint.json

在根路徑下創(chuàng)建tslint.json文件

這里就很簡單了,就是 引入 tsstandard 規(guī)范

{
  "extends": "tslint-config-standard",
  "globals": {
    "require": true
  }
}
讓 ts 識別 .vue

由于 TypeScript 默認(rèn)并不支持 *.vue 后綴的文件,所以在 vue 項(xiàng)目中引入的時候需要創(chuàng)建一個 vue-shim.d.ts 文件,放在項(xiàng)目項(xiàng)目對應(yīng)使用目錄下,例如 src/vue-shim.d.ts

declare module "*.vue" {
  import Vue from "vue";
  export default Vue;
}
敲黑板,下面有重點(diǎn)!

意思是告訴 TypeScript *.vue 后綴的文件可以交給 vue 模塊來處理。

而在代碼中導(dǎo)入 *.vue 文件的時候,需要寫上 .vue 后綴。原因還是因?yàn)?TypeScript 默認(rèn)只識別 *.ts 文件,不識別 *.vue 文件:

import Component from "components/component.vue"
改造 .vue 文件

在這之前先讓我們了解一下所需要的插件(下面的內(nèi)容需要掌握es7的裝飾器, 就是下面使用的@符號)

vue-class-component

vue-class-component 對 Vue 組件進(jìn)行了一層封裝,讓 Vue 組件語法在結(jié)合了 TypeScript 語法之后更加扁平化:




上面的代碼跟下面的代碼作用是一樣的

export default {
  data () {
    return {
      msg: 123
    }
  }

  // 聲明周期鉤子
  mounted () {
    this.greet()
  }

  // 計算屬性
  computed: {
    computedMsg () {
      return "computed " + this.msg
    }
  }

  // 方法
  methods: {
    greet () {
      alert("greeting: " + this.msg)
    }
  }
}
vue-property-decorator

vue-property-decorator 是在 vue-class-component 上增強(qiáng)了更多的結(jié)合 Vue 特性的裝飾器,新增了這 7 個裝飾器:

@Emit

@Inject

@Model

@Prop

@Provide

@Watch

@Component (從 vue-class-component 繼承)

在這里列舉幾個常用的@Prop/@Watch/@Component, 更多信息,詳見官方文檔

import { Component, Emit, Inject, Model, Prop, Provide, Vue, Watch } from "vue-property-decorator"

@Component
export class MyComponent extends Vue {
  
  @Prop()
  propA: number = 1

  @Prop({ default: "default value" })
  propB: string

  @Prop([String, Boolean])
  propC: string | boolean

  @Prop({ type: null })
  propD: any

  @Watch("child")
  onChildChanged(val: string, oldVal: string) { }
}

上面的代碼相當(dāng)于:

export default {
  props: {
    checked: Boolean,
    propA: Number,
    propB: {
      type: String,
      default: "default value"
    },
    propC: [String, Boolean],
    propD: { type: null }
  }
  methods: {
    onChildChanged(val, oldVal) { }
  },
  watch: {
    "child": {
      handler: "onChildChanged",
      immediate: false,
      deep: false
    }
  }
}
開始修改App.vue文件

script 標(biāo)簽上加上 lang="ts", 意思是讓webpack將這段代碼識別為typescript 而非javascript

修改vue組件的構(gòu)造方式( 跟react組件寫法有點(diǎn)類似, 詳見官方 ), 如下圖

vue-property-decorator語法改造之前代碼

當(dāng)然也可以直接復(fù)制下面的代碼替換就可以了





接下來用相同的方式修改HelloWorld.vue即可

npm run dev

這個時候運(yùn)行項(xiàng)目就應(yīng)該能正常跑起來了

到這里我們的配置就已經(jīng)結(jié)束了

最后

如果按照文章沒有配置出來,可以參考此repo vue-typescript-starter (安全按照文章一步一步操作的版本)

總的來說,就如本文最初講,ts 從數(shù)據(jù)類型、結(jié)構(gòu)入手,通過靜態(tài)類型檢測來增強(qiáng)你代碼的健壯性,從而避免 bug 的產(chǎn)生。

同時可以繼續(xù)使用.vue單文件

而且我個人認(rèn)為加上了typescript,項(xiàng)目逼格提升2個level,也能讓后端大哥們不吐槽js弱語言的詬病了

相信之后 vue 對于 ts 的集成會更加友善,期待尤大之后的動作

還有后續(xù) vue + typescript 進(jìn)階篇

參考鏈接/推薦閱讀

TypeScript

vue typescript 支持

從 JavaScript 到 TypeScript 6 - Vue 引入 TypeScript

Vue with TypeScript

ES7 Decorator 裝飾者模式

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89346.html

相關(guān)文章

  • vue + typescript 進(jìn)階篇

    摘要:進(jìn)階篇本文是繼新項(xiàng)目起手式之后的進(jìn)階踩坑配置,所以推薦先行閱讀前文完整閱讀完之后,基本可以順利在新項(xiàng)目中使用了另外特別注意不推薦在已有項(xiàng)目上強(qiáng)加,因?qū)懛ǖ慕M件跟之前的組件不兼容,若上的話需要修改之前寫的組件配置完整版可參考,若沒配置出來 vue + typescript 進(jìn)階篇 本文是繼 Vue + TypeScript 新項(xiàng)目起手式 之后的進(jìn)階+踩坑配置,所以推薦先行閱讀前文 ...

    lemanli 評論0 收藏0
  • 踩坑--- 基于釘釘?shù)腤eex微應(yīng)用開發(fā)手式(其實(shí)寫完發(fā)現(xiàn)變成Weex相關(guān)資料匯總了)

    摘要:問題,你可以在中文討論板塊提交問題,地址。文字展現(xiàn)必須使用標(biāo)簽關(guān)于端的點(diǎn)透事件需要在上層視圖上加上,如果上層視圖有事件,多加一個中間層,把加在空事件視圖上關(guān)于事件注意僅支持和,暫不支持。事件會在頁面就要關(guān)閉時被觸發(fā)。 好吧,我知道你來看這個文章,一定是遇到坑了,所以,把這幾個放在最開始吧 現(xiàn)在,如果你的團(tuán)隊(duì)的技術(shù)棧是react,請嘗試這個吧,跟react很像,如果你的團(tuán)隊(duì)一直使用rea...

    zhouzhou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<