Tujuan
Jadi saya memiliki proyek dengan struktur ini:
- aplikasi ion
- fungsi firebase
- bersama
Tujuannya adalah untuk mendefinisikan antarmuka dan kelas umum dalam shared
modul.
Batasan
Saya tidak ingin mengunggah kode saya ke npm untuk menggunakannya secara lokal dan saya tidak berencana untuk mengunggah kode sama sekali. Seharusnya 100% berfungsi offline.
Sementara proses pengembangan harus bekerja offline, ionic-app
dan firebase-functions
modul akan digunakan untuk firebase (hosting & fungsi). Oleh karena itu, kode dari shared
modul harus tersedia di sana.
Apa yang saya coba sejauh ini
- Saya telah mencoba menggunakan Referensi Proyek dalam naskah, tetapi saya belum membuatnya bekerja
- Saya mencobanya dengan menginstalnya sebagai modul npm seperti pada jawaban kedua dari pertanyaan ini
- Tampaknya bekerja dengan baik pada awalnya, tetapi selama membangun, saya mendapatkan kesalahan seperti ini ketika menjalankan
firebase deploy
:
- Tampaknya bekerja dengan baik pada awalnya, tetapi selama membangun, saya mendapatkan kesalahan seperti ini ketika menjalankan
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)
Pertanyaan
Apakah Anda memiliki solusi untuk membuat modul yang dibagikan menggunakan konfigurasi huruf, atau NPM?
Tolong jangan tandai ini sebagai duplikat → Saya telah mencoba solusi apa pun yang saya temukan di StackOverflow.
Informasi tambahan
Konfigurasi untuk dibagikan:
// 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"
}
}
Konfigurasi untuk fungsi:
// 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 saat ini
Saya telah menambahkan skrip npm ke modul bersama, yang menyalin semua file (tanpa index.js) ke modul lain. Ini memiliki masalah, bahwa saya memeriksa kode duplikat ke dalam SCM, dan bahwa saya perlu menjalankan perintah itu pada setiap perubahan. Juga, IDE hanya memperlakukannya sebagai file yang berbeda.