Objectif
J'ai donc un projet avec cette structure:
- ionic-app
- fonctions de base de feu
- partagé
L'objectif est de définir des interfaces et des classes communes dans le shared
module.
Restrictions
Je ne veux pas télécharger mon code sur npm pour l'utiliser localement et je n'envisage pas du tout de télécharger le code. Il devrait fonctionner à 100% hors ligne.
Alors que le processus de développement devrait fonctionner hors ligne, les modules ionic-app
et firebase-functions
vont être déployés sur firebase (hébergement et fonctions). Par conséquent, le code du shared
module devrait y être disponible.
Ce que j'ai essayé jusqu'à présent
- J'ai essayé d'utiliser les références de projet en dactylographie, mais je ne l'ai pas approché du travail
- Je l'ai essayé en l'installant comme module npm comme dans la deuxième réponse de cette question
- Cela semble bien fonctionner au début, mais pendant la génération, j'obtiens une erreur comme celle-ci lors de l'exécution
firebase deploy
:
- Cela semble bien fonctionner au début, mais pendant la génération, j'obtiens une erreur comme celle-ci lors de l'exécution
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)
Question
Avez-vous une solution pour créer un module partagé à l'aide de la configuration de scripts de saisie ou de NPM?
Veuillez ne pas marquer ceci comme un doublon → J'ai essayé n'importe quelle solution que j'ai trouvée sur StackOverflow.
Information additionnelle
Configuration pour partagé:
// 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"
}
}
Configuration pour les fonctions:
// 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 actuelle
J'ai ajouté un script npm au module partagé, qui copie tous les fichiers (sans index.js) dans les autres modules. Cela a le problème, que j'archive le code en double dans SCM, et que j'ai besoin d'exécuter cette commande à chaque changement. De plus, l'EDI le traite simplement comme des fichiers différents.