เป้าหมาย
ดังนั้นฉันจึงมีโครงการที่มีโครงสร้างนี้:
- อิออนแอป
- Firebase ฟังก์ชั่น
- ที่ใช้ร่วมกัน
เป้าหมายคือการกำหนดอินเตอร์เฟสและคลาสทั่วไปในshared
โมดูล
ข้อ จำกัด
ฉันไม่ต้องการอัปโหลดรหัสของฉันไปยัง npm เพื่อใช้งานในพื้นที่และฉันไม่ได้วางแผนที่จะอัปโหลดรหัสเลย ควรทำงาน 100% ออฟไลน์
ในขณะที่กระบวนการพัฒนาควรทำงานแบบออฟไลน์โมดูลionic-app
และfirebase-functions
กำลังจะถูกปรับใช้กับ firebase (การโฮสต์และฟังก์ชัน) ดังนั้นรหัสจากshared
โมดูลควรจะมีอยู่ที่นั่น
สิ่งที่ฉันได้ลองมาแล้ว
- ฉันได้ลองใช้Project Referencesใน typescript แล้ว แต่ฉันยังไม่ได้ทำงาน
- ฉันลองด้วยการติดตั้งเป็นโมดูล 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)
คำถาม
คุณมีวิธีแก้ปัญหาสำหรับการสร้างโมดูลที่แบ่งใช้โดยใช้ typescripts config หรือ NPM หรือไม่?
โปรดอย่าทำเครื่องหมายสิ่งนี้ว่าซ้ำ→ฉันลองใช้วิธีแก้ไขปัญหาใด ๆ ที่พบใน StackOverflow
ข้อมูลเพิ่มเติม
กำหนดค่าสำหรับแบ่งปัน:
// 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 ปัจจุบัน
ฉันได้เพิ่มสคริปต์ npm ไปยังโมดูลที่ใช้ร่วมกันซึ่งคัดลอกไฟล์ทั้งหมด (ไม่มี index.js) ไปยังโมดูลอื่น นี่เป็นปัญหาที่ฉันตรวจสอบรหัสที่ซ้ำกันใน SCM และฉันต้องเรียกใช้คำสั่งนั้นในการเปลี่ยนแปลงทุกครั้ง นอกจากนี้ IDE ยังถือว่าเป็นไฟล์อื่น