Hedef
Bu yapıya sahip bir projem var:
- iyonik Uygulama
- Firebase fonksiyonları
- paylaşılan
Amaç shared
modüldeki ortak arayüzleri ve sınıfları tanımlamaktır .
Kısıtlamalar
Yerel olarak kullanmak için kodumu npm'e yüklemek istemiyorum ve kodu hiç yüklemeyi planlamıyorum. % 100 çevrimdışı çalışmalıdır.
Geliştirme sürecinin çevrimdışı çalışması gerekirken, ionic-app
ve firebase-functions
modülleri ateş tabanına (barındırma ve işlevler) dağıtılacaktır. Bu nedenle, shared
modülün kodu orada mevcut olmalıdır.
Şimdiye kadar denediklerim
- Daktiloda Proje Referanslarını kullanmayı denedim , ancak çalışmaya yakın bulmadım
- Bu sorunun ikinci cevabında olduğu gibi bir npm modülü olarak kurarak denedim
- İlk başta iyi çalışıyor gibi görünüyor, ancak derleme sırasında çalışırken böyle bir hata alıyorum
firebase deploy
:
- İlk başta iyi çalışıyor gibi görünüyor, ancak derleme sırasında çalışırken böyle bir hata alıyorum
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)
Soru
Typcripts config veya NPM'yi kullanarak paylaşılan bir modül oluşturmak için bir çözümünüz var mı?
Lütfen bunu bir kopya olarak işaretlemeyin → StackOverflow üzerinde bulduğum herhangi bir çözümü denedim.
İlave bilgi
Paylaşım için yapılandırma:
// 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"
}
}
İşlevler için yapılandırma:
// 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"
}
}
Mevcut dikkat
Tüm modülleri (index.js olmadan) diğer modüllere kopyalayan paylaşılan modüle bir npm komut dosyası ekledim. Bu sorun, SCM içine yinelenen kod kontrol ve her değişikliği bu komutu çalıştırmak gerekir. Ayrıca, IDE sadece farklı dosyalar gibi davranır.