Firebase-tools: TypeScriptλ₯Ό μ‚¬μš©ν•˜μ—¬ 배포 ν•  λ•Œ '@ custom-modules / moduleName'λͺ¨λ“ˆμ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 11μ›” 01일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: firebase/firebase-tools

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에 κ²Œμ‹œλ˜μ—ˆμœΌλ©° μ§€κΈˆμ€ λˆ„κ΅¬λ“ μ§€ λ‚˜λ₯Ό λ„μšΈ 수 μžˆμŠ΅λ‹ˆκΉŒ? κ³ λ§ˆμ›Œ ~ 🀣

question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ•ˆλ…•! 이 λ¬Έμ œμ— λŒ€ν•œ 더 λ§Žμ€ 정보λ₯Ό μΆ”κ°€ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
λ‚΄ λ‹€λ₯Έ 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 인수λ₯Ό μΆ”κ°€ν•˜λŠ” 방법이 μžˆμ„κΉŒμš”?

λͺ¨λ“  3 λŒ“κΈ€

λ‚΄ 이해가 μž‘λ™ν•¨μ— 따라 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 κ°€ μ €μ—κ²Œ νš¨κ³Όμ μ΄λΌλŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€.

  1. μƒˆ 파일 λ§Œλ“€κΈ° /src/fixTsPaths.ts :

    import * as ModuleAlias from 'module-alias'
    
    ModuleAlias.addAliases({
      helpers: __dirname + '/helpers',
    })
    
  2. /scr/index.ts μ—μ„œ κ°€μ Έμ˜΅λ‹ˆλ‹€.

    import * as functions from 'firebase-functions'
    import * as admin from 'firebase-admin'
    import './fixTsPaths'
    
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰