लक्ष्य
तो मैं इस संरचना के साथ एक परियोजना कर रहा हूँ:
- आयनिक-ऐप
- firebase-कार्यों
- साझा
लक्ष्य shared
मॉड्यूल में आम इंटरफेस और कक्षाओं को परिभाषित करना है ।
प्रतिबंध
मैं अपने कोड को स्थानीय रूप से उपयोग करने के लिए npm पर अपलोड नहीं करना चाहता हूं और कोड अपलोड करने की योजना बिल्कुल नहीं बना रहा हूं। यह 100% ऑफ़लाइन काम करना चाहिए।
जबकि विकास प्रक्रिया को ऑफ़लाइन काम करना चाहिए, ionic-app
और firebase-functions
मॉड्यूल फायरबेस (होस्टिंग और फ़ंक्शंस) में तैनात होने जा रहे हैं। इसलिए, shared
मॉड्यूल से कोड वहां उपलब्ध होना चाहिए।
मैंने अब तक क्या कोशिश की है
- मैंने टाइपस्क्रिप्ट में प्रोजेक्ट संदर्भों का उपयोग करने की कोशिश की है , लेकिन मैंने इसे काम करने के करीब नहीं पहुंचाया है
- मैंने इसे एक npm मॉड्यूल के रूप में स्थापित करने की कोशिश की, जैसे कि इस प्रश्न का दूसरा उत्तर
- यह पहली बार में ठीक काम कर रहा है, लेकिन निर्माण के दौरान, मुझे इस तरह से एक त्रुटि मिलती है
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)
सवाल
क्या आपके पास किसी भी प्रकार के स्क्रिप्ट, या NPM का उपयोग करके एक साझा मॉड्यूल बनाने के लिए एक समाधान है?
कृपया इसे डुप्लिकेट के रूप में चिह्नित न करें → मैंने स्टैकऑवरफ्लो पर पाए गए किसी भी समाधान की कोशिश की है।
अतिरिक्त जानकारी
साझा करने के लिए कॉन्फ़िगर करें:
// 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"
}
}
वर्तमान soution
मैंने एक एनपीएम स्क्रिप्ट को साझा मॉड्यूल में जोड़ा है, जो अन्य मॉड्यूल को सभी फाइलों (index.js के बिना) को कॉपी करता है। यह समस्या है, कि मैं SCM में डुप्लिकेट कोड की जांच करता हूं, और मुझे हर बदलाव पर उस कमांड को चलाने की आवश्यकता है। इसके अलावा, आईडीई इसे अलग-अलग फ़ाइलों के रूप में मानता है।