【发布时间】:2020-02-26 03:38:32
【问题描述】:
目标
所以我有一个具有这种结构的项目:
- 离子应用
- firebase 功能
- 共享
目标是在shared 模块中定义通用接口和类。
限制
我不想将我的代码上传到 npm 以在本地使用它,并且根本不打算上传代码。它应该 100% 离线工作。
虽然开发过程应该离线工作,但 ionic-app 和 firebase-functions 模块将被部署到 firebase(托管和功能)。因此,shared 模块中的代码应该在那里可用。
到目前为止我已经尝试过什么
- 我曾尝试在打字稿中使用Project References,但我还没有接近工作
- 我尝试将它安装为 npm 模块,就像在 this question 的第二个答案中一样
- 一开始似乎工作正常,但是在构建过程中,运行
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"
}
}
当前解决方案
我在共享模块中添加了一个 npm 脚本,它将所有文件(不包括 index.js)复制到其他模块。这有一个问题,我将重复的代码签入到 SCM 中,并且我需要在每次更改时运行该命令。此外,IDE 只是将其视为不同的文件。
【问题讨论】:
标签: node.js typescript firebase npm node-modules