🦁

ESModules化したNestJSで絶対パスimportを使う

2024/08/13に公開

これはなに

https://zenn.dev/shuhei_takada/articles/a7531731a7cf04

上記の記事でNestJSをESModules化する方法についてまとめましたが、このままだとimport時に相対パスでimportしなければならず、絶対パスでのimportができません。

import { AppModule } from '../../../../../app.module.js'; // 「../」をたくさんつけないといけない

これを絶対パスでimportできるようにする方法をまとめます。

ESModules化したNestJSで絶対パスimportを使う

解決先はswcを使うことです。

https://docs.nestjs.com/recipes/swc

まずはswcをinstallする。

npm i @swc/cli @swc/core

nest-cli.jsonでコンパイラにswcを使うように指定する。

nest-cli.json
"compilerOptions": {
+ "builder": "swc",
  "deleteOutDir": true
}

.swcrcを作成する。
(コンパイル後の形式をnodenextにする。es6でも動く)

{
  "module": {
    "type": "nodenext"
  }
}

絶対パスでimportできるようにtsconfig.jsonを修正。

tsconfig.json
"compilerOptions": {
+ "paths": {
+   "~/*": ["src/*"]
+ },

これでsrc/配下を~/でimportできるようになります。

app.module.ts
- import { AppService } from './app.service.js';
+ import { AppService } from '~/app.service.js';

以上です。

Discussion