javascript - Truyền đối số cho ứng dụng electron đã gói
Chúng tôi đang sử dụng electron-packager để đóng gói và phân phối phần front-end của ứng dụng web. Chúng tôi cần có khả năng truyền host và port của server vào phần front-end của Electron để kết nối. Khi chúng tôi khởi chạy qua electron main.js --host blah --port 8080 thì hoạt động. Khi đã được đóng gói, chúng tôi chạy thông qua ./MyApp --host blah --port 8080 thì không hoạt động. Điều này không tốt vì chúng tôi không muốn khách hàng phải cài đặt Electron/npm. Ngoài ra cũng nên lưu ý rằng điều này xảy ra bất kể chúng tôi đóng gói ứng dụng trong một tệp asar hay không.
Có ý tưởng nào về những việc chúng ta có thể thử, hoặc liệu chúng ta đang cố gắng làm điều này theo cách sai không?
Câu trả lời #1
Vậy bạn đang cố gắng phân tích cú pháp dòng lệnh như thế nào? process.argv trông như thế nào khi bạn bắt đầu với ./MyApp --host blah --port 8080?
Về cơ bản, khi bạn khởi động Electron, nó sẽ tìm trong thư mục tài nguyên của nó cho 'app', 'app.asar' hoặc 'default_app'; khi bạn khởi động ứng dụng của mình bằng electron main.js --host blah --port, một điều thực sự xảy ra là ứng dụng mặc định của Electron được khởi động, trong đó có việc phân tích các đối số dòng lệnh của bạn. Khi bạn đóng gói ứng dụng, nó được sao chép vào thư mục tài nguyên dưới dạng 'app' hoặc 'app.asar' và sẽ được khởi động trực tiếp khi bạn chạy MyApp sau này. Nói cách khác, bạn đang khởi động ứng dụng của mình theo hai cách hoàn toàn khác nhau và đây có khả năng là nguồn gốc của vấn đề bạn gặp phải.
Để giảm thiểu vấn đề này, điều tôi thích làm là liên kết thư mục phát triển của mình vào thư mục tài nguyên của Electron trong quá trình phát triển; theo cách này tôi có thể bỏ qua 'default_app' và có cùng đường dẫn thực thi dù ứng dụng có được đóng gói hay không.
Nói như vậy, không quan trọng bạn bắt đầu ứng dụng theo cách nào, bạn chắc chắn nên có khả năng phân tích các đối số dòng lệnh. Để tham khảo, tôi vừa thiết lập điều này trong một ứng dụng của mình với yargs nên bạn chắc chắn có thể làm cho nó hoạt động.
Câu trả lời #2
Tôi khuyên bạn nên sử dụng một hệ thống quản lý tham số dòng lệnh như 'minimist' chẳng hạn.
Bạn có thể sử dụng điều này trong json của bạn: "start": "electron . --srv=server.com --prt=112 --arg3=myarg3"
Trong file main.js của bạn, bạn có thể sử dụng điều này :
var args = require('minimist')(process.argv);
console.log(args)
và bạn có thể sử dụng các đối số của mình trong tệp javascript chính.
Đối với Gói, bạn có thể làm điều tương tự nhưng trong lối tắt, bằng cách thêm myapp.exe --srv=server.com --prt=112 --arg3=myarg3
