最近重構了我以前項目 qq 音樂移動端,使用的技術是 vue,vuex,vue-router,和 typescript,在這期間,遇到的問題仍是蠻多的,一下子我會把我遇到的問題以及解決方法列出來,避免忘記。
重構完成的項目 ===> vue-qq-musicjavascript
TypeScript與Vue全家桶的配置能夠參考如下兩篇文章(在這裏由衷感謝兩位做者):vue
爲何我要將TypeScript
和 Vue
集成呢?由於TypeScript 有如下幾個優點:java
ts 沒法識別$refwebpack
解決方法
① 直接在 this.$refs.xxx 後面申明類型如:git
this.$refs.lyricsLines as HTMLDivElement;
② 在export default class xxx extends Vue
裏面聲明所有的$ref 的類型es6
$refs: { audio: HTMLAudioElement, lyricsLines: HTMLDivElement }
ts 沒法識別 requiregithub
解決方法web
安裝聲明文件vue-router
yarn add @types/webpack-env -D
運行npm run build
出現
vuex
解決方法
You can fix this by using the most recent beta version ofuglifyjs-webpack-plugin
. Our team is working to remove completely the UglifyJsPlugin from within webpack, and instead have it as a standalone plugin.If you do
yarn add uglifyjs-webpack-plugin@beta --dev
ornpm install uglifyjs-webpack-plugin@beta --save-dev
you should receive the latest beta which does successfully minify es6 syntax. We are hoping to have this released from beta extremely soon, however it should save you from errors for now!
也就是說升級你的uglifyjs-webpack-plugin版本:yarn add uglifyjs-webpack-plugin@beta --dev
vue-property-decorator 裝飾器寫法不對。當時我是要把 mixins,注入到組件裏,我就這樣寫:
ts提示找不到 mixin。我就很納悶爲何找不到名字,因爲官網vue-property-decorator例子太少,只好一步一步摸索?
解決方法
把mixins寫在@Component裏面...,像這樣:
Property '$xxx' does not exist on type 'App'
的話,那麼能夠在vue-shim.d.ts
增長declare module 'vue/types/vue' { interface Vue { $xxx: any, } }
通過幾天的折騰,終於把項目重構完成,我我的認爲加上 TypeScript
,確實效率挺高了許多,不過 Vue+TypeScript
仍是沒 Angular
支持那麼完善,相信以後 vue 對於 ts 的集成會更加完善!