typescriptのみで構築してみた
webpackやnpmの仕組みを分かっていないので一番シンプルな構成でtypescriptを実装する方法を試してみる。
参考資料
以下を記事に従って環境を構築してみた。プロジェクト名はsssとして作成してみた。
最新版TypeScript+webpack 5の環境構築まとめ(React, Vue.js, Three.jsのサンプル付き) - ICS MEDIA
1.下準備
macでnodebrewをインストールしてnode.jsをインストールする。 でnpmがあるbinのpathを通す。
そしてプロジェクトを作成する。
$ cd Desktop $ mkdir sss
2. package.jsonを生成する
以下のコマンドでpackage.jsonを生成する。
$ npm init
3. 必要なパッケージを追加
webpackとそのwebpack-cliの追加。
typescriptとts-loaderの追加。
$ npm install -D webpack webpack-cli typescript ts-loader
4. 各設定ファイルを作成、編集する
package.json、tsconfig.json、webpack.config.jsを扱う。
ファイル名 | 処理 |
---|---|
package.json | 編集 |
tsconfig.json | 新規作成 |
webpack.config.js | 新規作成 |
a. package.jsonの編集内容
{ "name": "sss", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack", "watch": "webpack -w" }, "author": "", "license": "ISC", "devDependencies": { "ts-loader": "^8.0.7", "typescript": "^4.0.3", "webpack": "^5.2.0", "webpack-cli": "^4.1.0" }, "private": true }
b. tsconfig.jsonの編集内容
$ vi tsconfig.json
{ "compilerOptions": { "sourceMap": true, "target": "es5", // TSはECMAScript 5に変換 "module": "es2015", // TSのモジュールはES Modulesとして出力 } }
c. webpack.config.jsの編集内容
$ vi webpack.config.js
module.exports = { // モード値を production に設定すると最適化された状態で、 // development に設定するとソースマップ有効でJSファイルが出力される mode: 'development', // メインとなるJavaScriptファイル(エントリーポイント) entry: './src/main.ts', module: { rules: [ { // 拡張子 .ts の場合 test: /\.ts$/, // TypeScript をコンパイルする use: 'ts-loader', }, ], }, // import 文で .ts ファイルを解決するため // これを定義しないと import 文で拡張子を書く必要が生まれる。 // フロントエンドの開発では拡張子を省略することが多いので、 // 記載したほうがトラブルに巻き込まれにくい。 resolve: { // 拡張子を配列で指定 extensions: [ '.ts', '.js', ], }, };
この状態でコンパイルしてみる
以下のコマンドでコンパイルを実行する。
$ npm run build
以下の結果が表示される。
> sss@1.0.0 build /Users/user/Desktop/sss > webpack [webpack-cli] Compilation finished assets by status 0 bytes [cached] 1 asset ERROR in main Module not found: Error: Can't resolve './src' in '/Users/user/Desktop/sss' webpack 5.2.0 compiled with 1 error in 187 ms npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! sss@1.0.0 build: `webpack` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the sss@1.0.0 build script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /Users/user/.npm/_logs/2020-10-24T12_07_51_536Z-debug.log
ERROR in main Module not found: Error: Can't resolve './src' in '/Users/user/Desktop/sss'
結果の中盤で以下のようなエラーが表示される。 これはどうやら、sssというプロジェクトにsrcというディレクトリが見つからなかったからエラーが出た。
てことでsrcディレクトリを実行する。
$ mkdir src
ついでsrc以下にコンパイル対象のtypescriptファイルを作成する。
$ vi src/main.ts $ vi src/sub.ts
再度コンパイルしてみる
$ npm run build
結果
> sss@1.0.0 build /Users/user/Desktop/sss > webpack [webpack-cli] Compilation finished asset main.js 827 bytes [emitted] (name: main) ./src/main.ts 1 bytes [built] [code generated] webpack 5.2.0 compiled successfully in 1729 ms
分かったこと
コンパイルが成功すると、プロジェクトルートにdistディレクトリが生成される。でjavascriptファイルが出力される。 出力ファイル名はどのようにして決定されるのか? これはどうやらwebpack.config.jsのoutputの項目で定めることができるのではないかと思われるが、実際に試せていない。
またwebpack.config.jsで定められるentryのキーはsrc以下にコンパイル対象のtypescriptファイルを指定する。
entry: './src/main.ts',