골
그래서 나는이 구조의 프로젝트를 가지고 있습니다 :
- 이온 앱
- 파이어베이스 기능
- 공유
목표는 shared
모듈 에서 공통 인터페이스와 클래스를 정의하는 것입니다 .
제한 사항
로컬로 사용하기 위해 코드를 npm에 업로드하고 싶지 않으며 코드를 전혀 업로드하지 않을 계획입니다. 오프라인에서 100 % 작동해야합니다.
개발 프로세스는 오프라인에서 작동해야하지만 ionic-app
및 firebase-functions
모듈은 firebase (호스팅 및 기능)에 배포됩니다. 따라서 shared
모듈 의 코드를 사용할 수 있어야합니다.
내가 지금까지 시도한 것
- Typescript에서 Project References 를 사용해 보았지만 작동에 가깝지 않았습니다.
- 이 질문 의 두 번째 답변과 같이 npm 모듈로 설치하여 시도했습니다.
- 처음에는 잘 작동하는 것 같지만 빌드 중에는 다음과 같은 오류가 발생합니다
firebase deploy
.
- 처음에는 잘 작동하는 것 같지만 빌드 중에는 다음과 같은 오류가 발생합니다
Function failed on loading user code. Error message: Code in file lib/index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module 'shared'
at Function.Module._resolveFilename (module.js:548:15)
at Function.Module._load (module.js:475:25)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/srv/lib/index.js:5:18)
질문
typescripts config 또는 NPM을 사용하여 공유 모듈을 만드는 솔루션이 있습니까?
이것을 중복으로 표시하지 마십시오 → StackOverflow에서 찾은 해결책을 시도했습니다.
추가 정보
공유 구성 :
// package.json
{
"name": "shared",
"version": "1.0.0",
"description": "",
"main": "dist/src/index.js",
"types": "dist/src/index.d.ts",
"files": [
"dist/src/**/*"
],
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"publishConfig": {
"access": "private"
}
}
// tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"rootDir": ".",
"sourceRoot": "src",
"outDir": "dist",
"sourceMap": true,
"declaration": true,
"target": "es2017"
}
}
기능 구성 :
// package.json
{
"name": "functions",
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc",
"serve": "npm run build && firebase serve --only functions",
"shell": "npm run build && firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "8"
},
"main": "lib/index.js",
"dependencies": {
"firebase-admin": "^8.0.0",
"firebase-functions": "^3.1.0",
"shared": "file:../../shared"
},
"devDependencies": {
"@types/braintree": "^2.20.0",
"tslint": "^5.12.0",
"typescript": "^3.2.2"
},
"private": true
}
// tsconfig.json
{
"compilerOptions": {
"baseUrl": "./",
"module": "commonjs",
"noImplicitReturns": true,
"noUnusedLocals": false,
"rootDir": "src",
"outDir": "lib",
"sourceMap": true,
"strict": true,
"target": "es2017"
}
}
현재 soution
공유 모듈에 npm 스크립트를 추가했습니다.이 모듈은 index.js없이 모든 파일을 다른 모듈에 복사합니다. 이 문제는 SCM에 중복 코드를 체크인하고 변경 될 때마다 해당 명령을 실행해야한다는 문제가 있습니다. 또한 IDE는이를 다른 파일로 취급합니다.