Hey, guys ~ tsconfig.json
paths
μΈμλ₯Ό ν λΉ ν λ λ€μκ³Ό κ°μ΄ λ°°ν¬ ν μ μμ΅λλ€.
{
"compilerOptions": {
"lib": ["es6"],
"module": "commonjs",
"outDir": "lib",
"rootDir": "src",
"target": "es6",
"sourceMap": true,
"noImplicitReturns": true,
"baseUrl": ".",
// here, I assign a paths arguments
"paths": {
"@custom-modules/*": ["src/modules/*"],
}
},
"compileOnSave": true,
"include": ["src"]
}
paths
μΈμλ μΌλ°μ μΌλ‘ TypeScriptλ₯Ό μ¬μ©νλ©° μλ²½νκ² μλν©λλ€. κ·Έλ¬λ firebase deployλ λ€μ μ€λ₯λ₯Ό λ°μμν΅λλ€.
Error: Error parsing triggers: Cannot find module '@custom-modules/moduleName'
μ΄ μ§λ¬Έμ Firebase Cloud Functionsλ‘ TS κ²½λ‘ λ§€νμ μ¬μ©νλ λ°©λ² μ΄μ μ StackOverFlowμ κ²μλμμΌλ©° μ§κΈμ λꡬλ μ§ λλ₯Ό λμΈ μ μμ΅λκΉ? κ³ λ§μ ~ π€£
λ΄ μ΄ν΄κ° μλν¨μ λ°λΌ baseUrl
λ° paths
λ μ»΄νμΌλ¬μ λ¦°ν°μμλ§ λͺ¨λμ μ νκ³Ό μμΉλ₯Ό μ΄ν΄νλ λ° μ¬μ©λ©λλ€. μ΄ λ μμ±μ μ»΄νμΌμ 맀ν λ κ²½λ‘λ₯Ό _include_νκ±°λ μ»΄νμΌ μκ° λμ μλνλλ‘ import
λ¬Έμ λ³κ²½νλλ‘ μ»΄νμΌλ¬μ μ§μνμ§ _ μμ΅λλ€ _. μ»΄νμΌ λ lib
λλ ν 리λ₯Ό μ΄ν΄λ³΄κ³ @custom-modules/*
import
λ¬Έμ΄ λ³κ²½λμ§ μμλμ§ νμΈν©λλ€.
μ¦, μ€λ₯λ λ°°ν¬ νλ‘μΈμ€μμ CLIκ° ν¨μ μ½λλ₯Ό ν΄μνμ¬ μ΄λ€ ν¨μλ₯Ό λ°°ν¬ν΄μΌνλμ§ μ΄ν΄νκΈ° λλ¬Έμ λ°μν©λλ€. ν¨μ μ½λμλ μμ§ λͺ»νλ λͺ¨λμ΄ νμνλ―λ‘ ( lib
ν΄λμ μμ) ν΄λΉ λ©μμ§λ₯Ό μΆλ ₯νλ μ€λ₯κ° λ°μν©λλ€.
import ... from "@custom-modules/...";
νκ³ κ΅¬μ‘°μ λ€λ₯Έ μμΉλ‘ λ€μ 맀ννμ¬ νμ΄νμ μ μ₯νλ €λ κ²½μ° μλμ κ°μ Έ μ€κΈ°λ₯Ό μννμ¬μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€. μ΄λ μλ§λ κΆμ₯λλ λ°©λ² μΌ κ²μ
λλ€. baseUrl
λ° paths
κ° κ·νκ° μ°Ύκ³ μλ λ΅μ΄λΌκ³ μκ°νμ§ μμ΅λλ€.
μλ
! μ΄ λ¬Έμ μ λν λ λ§μ μ 보λ₯Ό μΆκ°νκ³ μΆμ΅λλ€.
λ΄ λ€λ₯Έ Node.js + TypeScript νλ‘μ νΈμμλ μμμ μ€λͺ
νλλ‘ Typescriptκ° μΆλ ₯ JSμμ κ²½λ‘λ₯Ό μꡬνμ§ μκΈ° λλ¬Έμ λ¬Έμ κ° λ°μνμ΅λλ€. λ΄κ° μ°Ύμ μ μΌν μ루μ
μ https://github.com/dividab/tsconfig-paths#with -nodeμ΄λ©°, tsconfig.json
κ΅¬μ± νμΌμ κΈ°λ°μΌλ‘ Node.js κ²½λ‘ μ²λ¦¬ λ°©μμ λ³κ²½ν©λλ€. Nodeμ μ λ¬ λ -r tsconfig-paths/register
μΈμ λλΆμ μλνλ©°, λ°νμμμ register
λ₯Ό μ€ν (index.ts 맨 μμμλ)νλ κ²μ Firebase ν¨μμμ μλνμ§ μλ κ² κ°μ΅λλ€.
μλ κ²½λ‘λ₯Ό κ°λ κ²μ μ μκ² λ§€μ° λΆνΈν κ² κ°μ΅λλ€. μλνλ©΄ νλ‘ νΈ μλ μ½λμμλ μ¬μ©λλ common
ν΄λκ° μκΈ° λλ¬Έμ
λλ€. μλ κ²½λ‘λ index.tsμμ ../../../common
μ²λΌ λ³΄μΌ κ²μ
λλ€. νμ ν΄λμ μμ΅λλ€.
κ·Έλ λ€λ©΄ λ‘컬 λ° νλ‘λμ
νκ²½μ ν¬ν¨νμ¬ Firebase ν¨μμ λν΄μ΄ -r tsconfig-paths/register
μΈμλ₯Ό μΆκ°νλ λ°©λ²μ΄ μμκΉμ?
https://www.npmjs.com/package/module-alias κ° μ μκ² ν¨κ³Όμ μ΄λΌλ κ²μ μμμ΅λλ€.
μ νμΌ λ§λ€κΈ° /src/fixTsPaths.ts
:
import * as ModuleAlias from 'module-alias'
ModuleAlias.addAliases({
helpers: __dirname + '/helpers',
})
/scr/index.ts
μμ κ°μ Έμ΅λλ€.
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import './fixTsPaths'
κ°μ₯ μ μ©ν λκΈ
μλ ! μ΄ λ¬Έμ μ λν λ λ§μ μ 보λ₯Ό μΆκ°νκ³ μΆμ΅λλ€.
λ΄ λ€λ₯Έ Node.js + TypeScript νλ‘μ νΈμμλ μμμ μ€λͺ νλλ‘ Typescriptκ° μΆλ ₯ JSμμ κ²½λ‘λ₯Ό μꡬνμ§ μκΈ° λλ¬Έμ λ¬Έμ κ° λ°μνμ΅λλ€. λ΄κ° μ°Ύμ μ μΌν μ루μ μ https://github.com/dividab/tsconfig-paths#with -nodeμ΄λ©°,
tsconfig.json
κ΅¬μ± νμΌμ κΈ°λ°μΌλ‘ Node.js κ²½λ‘ μ²λ¦¬ λ°©μμ λ³κ²½ν©λλ€. Nodeμ μ λ¬ λ-r tsconfig-paths/register
μΈμ λλΆμ μλνλ©°, λ°νμμμregister
λ₯Ό μ€ν (index.ts 맨 μμμλ)νλ κ²μ Firebase ν¨μμμ μλνμ§ μλ κ² κ°μ΅λλ€.μλ κ²½λ‘λ₯Ό κ°λ κ²μ μ μκ² λ§€μ° λΆνΈν κ² κ°μ΅λλ€. μλνλ©΄ νλ‘ νΈ μλ μ½λμμλ μ¬μ©λλ
common
ν΄λκ° μκΈ° λλ¬Έμ λλ€. μλ κ²½λ‘λ index.tsμμ../../../common
μ²λΌ λ³΄μΌ κ²μ λλ€. νμ ν΄λμ μμ΅λλ€.κ·Έλ λ€λ©΄ λ‘컬 λ° νλ‘λμ νκ²½μ ν¬ν¨νμ¬ Firebase ν¨μμ λν΄μ΄
-r tsconfig-paths/register
μΈμλ₯Ό μΆκ°νλ λ°©λ²μ΄ μμκΉμ?