Tor
Ich habe also ein Projekt mit dieser Struktur:
- ionic-app
- Firebase-Funktionen
- geteilt
Ziel ist es, gemeinsame Schnittstellen und Klassen im shared
Modul zu definieren .
Beschränkungen
Ich möchte meinen Code nicht auf npm hochladen, um ihn lokal zu verwenden, und habe nicht vor, den Code überhaupt hochzuladen. Es sollte zu 100% offline funktionieren.
Während der Entwicklungsprozess offline funktionieren sollte, werden die Module ionic-app
und firebase-functions
in der Firebase (Hosting & Funktionen) bereitgestellt. Daher sollte der Code aus dem shared
Modul dort verfügbar sein.
Was ich bisher versucht habe
- Ich habe versucht, Projektreferenzen in Typoskript zu verwenden, aber ich habe es nicht annähernd zum Laufen gebracht
- Ich habe es mit der Installation als npm-Modul versucht, wie in der zweiten Antwort auf diese Frage
- Es scheint zunächst gut zu funktionieren, aber während des Builds erhalte ich beim Ausführen
firebase deploy
folgende Fehlermeldung :
- Es scheint zunächst gut zu funktionieren, aber während des Builds erhalte ich beim Ausführen
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)
Frage
Haben Sie eine Lösung für die Erstellung eines gemeinsam genutzten Moduls mit Typescripts Config oder NPM?
Bitte markieren Sie dies nicht als Duplikat → Ich habe eine Lösung ausprobiert, die ich in StackOverflow gefunden habe.
Zusätzliche Information
Konfiguration für gemeinsam genutzte:
// 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"
}
}
Konfiguration für Funktionen:
// 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"
}
}
Aktuelle Lösung
Ich habe dem freigegebenen Modul ein npm-Skript hinzugefügt, das alle Dateien (ohne index.js) in die anderen Module kopiert. Dies hat das Problem, dass ich doppelten Code in SCM einchecke und diesen Befehl bei jeder Änderung ausführen muss. Außerdem behandelt die IDE sie nur als unterschiedliche Dateien.