都
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方案