
こんにちは! システム事業部の村田です。
の続きです
間違い等ありましたらコメント頂けると幸いです。
使う主なもの
- Vue.js
- TypeScript
- webpack
- yarn
また、執筆時の各versionは
- Vue.js(2.5.13)
- webpack(4.6.0)
- yarn(1.6.0)
- ts-loader(4.2.0)
- vue-loader(14.2.2)
- typescript(2.8.3)
です。 (part1よりvarsionが上がってます・・・part1の手順は同じく再現できているのでご了承ください)
TypeScript用のライブラリを追加 yarn add typescript ts-loader
tsconfig.jsonを生成
/node_modules/.bin/tsc --init
vue.js公式の推奨設定にしたがい最低限の設定を行います。
{
"compilerOptions": {
/* Basic Options */
"target": "ES2015",
"module": "es2015",
/* Strict Type-Checking Options */
"strict": true,
/* Module Resolution Options */
"moduleResolution": "node",
"esModuleInterop": true
}
}
webpack.config.jsをTypeScriptを支えるように更新します。
webpack.config.js
const path = require('path');
module.exports = {
mode: 'development',
// 拡張子をtsに
entry: './src/index.ts',
output: {
path: path.join(__dirname, 'public'),
filename: 'bundle.js'
},
devServer: {
contentBase: 'public',
port: 4000
},
resolve: {
// 拡張子にtsを追加
extensions: ['.ts', '.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js'
}
},
module: {
// TypeScriptのコンパイラを追加
rules: [
{
test: /\.ts$/,
loader: 'ts-loader'
}
]
}
};
これで、最低限.tsのファイルをコンパイルできるようになりました。
このままだと、vue.jsのsfcが使え無いので、そちらも使えるように更に追記します。
yarn add vue-loader vue-template-compiler
webpack.config.js
const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.ts',
output: {
path: path.join(__dirname, 'public'),
filename: 'bundle.js'
},
devServer: {
contentBase: 'public',
port: 4000
},
resolve: {
extensions: ['.ts', '.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js'
}
},
module: {
rules: [
// .vueファイルをコンパイルするvue-loaderを指定
{
test: /\.vue$/,
loader: 'vue-loader'
},
{
test: /\.ts$/,
loader: 'ts-loader',
options: {
// .vueファイルをtsとして監視するように追加
appendTsSuffixTo: [/\.vue$/]
}
}
]
}
};
また、.vueファイルの情報を定義したファイルを、.d.ts拡張子で定義します
vue.d.ts
declare module "*.vue" {
import Vue from 'vue'
export default Vue
}
現在はまだ、sfcを使ってい無いので、使うように変更します。
index.ts
import Vue from 'vue'
import App from './App.vue'
// App.vueを描画する様に変更する
new Vue({
el: '#app',
template: '<App/>',
components: { App }
})
App.vue
<template>
<div id="app">
<h1>Hello Vue with ts</h1>
<Sub/>
</div>
</template>
<script>
// 出力するサブコンポーネントを定義
import Sub from './pages/Sub.vue'
export default {
components: {
Sub
}
}
</script>
Sub.vue
<template>
<div>
<h2>sub commpornent</h2>
</div>
</template>
この状態で、 yarn start して、localhost:4000にアクセスできれば成功です!

お疲れ様でした!
