都
9102年
了, 你還在用vue-cli
一鍵生成項目嗎, 都9102年
了, 你尚未用過TypeScript
嗎javascript
若是你使用過
TypeScript
, 必定會感慨開(ban)發(zhuan)體驗真爽html
可是, 若是你嘗試過本身動手去構建一個
TypeScript
項目, 你可能會發現這裏面會有不少的坑, 想要順利出坑, 請記住Evan You
大大的話vue
若是你問我爲啥連
Webpack
都要用TypeScript
去配置, 由於代碼潔癖的職業病, 因此java
TypeScript
寫Webpack
配置TypeScript + Webpack
構建Vue
項目TypeScript + Webpack
項目TypeScript + Webpack + Vue
項目TypeScript + Webpack + Vue + H5開發VW適配
項目這是我在掘金的第一篇文章, 歡迎各位大佬交流和指正node
TypeScript
寫Webpack
配置Webpack
官方文檔找到對TypeScript
配置語言的支持webpack.js.org/configurati…閱讀官方文檔, 該方案的原理是利用ts-node
去運行Webpack
webpack
安裝項目須要的具備類型定義的依賴git
$ npm i -D typescript ts-node @types/node @types/webpack @types/webpack-dev-server
複製代碼
配置入口文件和打包出口github
配置tsconfig.jsonweb
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"esModuleInterop": true
}
}
複製代碼
$ npm i -D tsconfig-paths
複製代碼
// 方案1: 添加npm scripts
// "build": "cross-env TS_NODE_PROJECT=\"tsconfig-for-webpack-config.json\" webpack"
// 方案2: 利用package.json的config
"config": {
"TS_NODE_PROJECT": "\"tsconfig-for-webpack-config.json\""
},
複製代碼
Mac
系統, 按住command
鍵, 鼠標懸停至包名, 可單擊查看Webpack
源碼裏的命名空間TypeScript + Webpack
構建Vue
項目vue-loader
官方文檔找到ts-loader
預處理器的配置vue-loader.vuejs.org/zh/guide/pr…npm i -D typescript ts-loader
複製代碼
// webpack.config.js
module.exports = {
resolve: {
extensions: ['.ts', '.js']
},
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader',
options: { appendTsSuffixTo: [/\.vue$/] }
}
]
},
// ...plugin omitted
}
複製代碼
vue-loader
V15須要配置Webpack
插件才能正確使用 vue-loader.vuejs.org/migrating.h…// webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
// ...
plugins: [
new VueLoaderPlugin()
]
}
複製代碼
查看Vue.js
官方文檔裏對TypeScript
的支持vuejs.org/v2/guide/ty…vue-cli
在項目src
裏添加vue-shims.d.ts
declare module '*.vue' {
import Vue from 'vue'
export default Vue
}
複製代碼
Vue
對TypeScript
支持的依賴$ npm i -D vue-class-component vue-property-decorator
複製代碼
<template lang="pug">
.hello {{ computedMsg }}
</template>
<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'
@Component
export default class HelloComponent extends Vue {
msg = ''
mounted () {
this.greet()
}
get computedMsg () {
return 'Hello, ' + this.msg
}
greet () {
this.msg = 'typeScirpt_webpack_vue !'
}
}
</script>
複製代碼
TypeScript + Webpack
項目TypeScript + Webpack + Vue
項目TypeScript + Webpack + Vue + H5開發VW適配
項目, 參考大漠老師的移動端px自動轉換vw方案