Mục tiêu
Vì vậy, tôi đang có một dự án với cấu trúc này:
- ứng dụng ion
- chức năng hỏa lực
- chia sẻ
Mục tiêu là để xác định các giao diện và các lớp phổ biến trong shared
mô-đun.
Những hạn chế
Tôi không muốn tải mã của mình lên npm để sử dụng cục bộ và không có ý định tải lên mã. Nó nên hoạt động 100% nhé.
Trong khi quá trình phát triển nên hoạt động ngoại tuyến, các mô-đun ionic-app
và firebase-functions
sẽ được triển khai đến căn cứ hỏa lực (lưu trữ & chức năng). Do đó, mã từ các shared
mô-đun nên có sẵn ở đó.
Những gì tôi đã cố gắng cho đến nay
- Tôi đã thử sử dụng Project Reference trong bản thảo, nhưng tôi không thể làm việc được
- Tôi đã thử nó với việc cài đặt nó như một mô-đun npm như trong câu trả lời thứ hai của câu hỏi này
- Nó có vẻ hoạt động tốt lúc đầu, nhưng trong quá trình xây dựng, tôi gặp lỗi như thế này khi chạy
firebase deploy
:
- Nó có vẻ hoạt động tốt lúc đầu, nhưng trong quá trình xây dựng, tôi gặp lỗi như thế này khi chạy
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)
Câu hỏi
Bạn có giải pháp nào để tạo một mô-đun chia sẻ bằng cách sử dụng cấu hình kiểu chữ hoặc NPM không?
Vui lòng không đánh dấu đây là bản sao → Tôi đã thử bất kỳ giải pháp nào tôi tìm thấy trên StackOverflow.
Thông tin bổ sung
Cấu hình để chia sẻ:
// 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"
}
}
Cấu hình cho các chức năng:
// 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 hiện tại
Tôi đã thêm một tập lệnh npm vào mô-đun chia sẻ, sao chép tất cả các tệp (không có index.js) sang các mô-đun khác. Điều này có vấn đề, rằng tôi kiểm tra mã trùng lặp vào SCM và tôi cần chạy lệnh đó trên mỗi thay đổi. Ngoài ra, IDE chỉ coi nó là các tệp khác nhau.