Есть несколько способов решить эту проблему, и записать их в один ответ невозможно.Однако я могу предоставить некоторые рекомендации выше nexe
и electron
.Также есть enclosejs
и pkg
.
В обоих нижеприведенных решениях одно из самых важных правил - не связывать вашу папку node_modules.Бинарный хром не будет работать, если вы его объедините.
Nexe
Вы можете использовать nexe .Который загрузит и свяжет ваш скрипт nodejs в один исполняемый файл.Установите его глобально,
npm i -g nexe
Затем создайте сценарий кукловода.вот пример файла,
const puppeteer = require("puppeteer");
async function scraper(url) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);
const title = await page.title();
await browser.close();
return title;
}
scraper("http://example.com").then(console.log);
Теперь свяжите его, используя,
nexe index.js
Наконец, скопируйте папку node_modules и связанный исполняемый файл файл для вашего клиента.
Электрон
Вы можете иметь хороший графический интерфейс с электроном и создать исполняемый файл, используя строитель электронов.
PS: GUI является необязательным и не является частью этого ответа.Это просто чтобы показать, как вы можете иметь исполняемый файл для вашего клиента, который может сделать гораздо больше, чем просто запустить браузер.
Я не буду вдаваться в то, что такое электрон и как он работает, вместо этого я 'Я буду использовать пример быстрого запуска.Если вы хотите получить окончательный код, проверьте этот репо .
Сначала клонируйте быстрый старт репо,
git clone https://github.com/electron/electron-quick-start
Затем установите кукловода и строителя электронов,
yarn add puppeteer
npm i -g electron-builder
Теперь отредактируйте main.js
и добавьте nodeIntegration: true
к webPreferences
,
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: true // <-- this line
}
})
Теперь отредактируйте index.html
и добавьте кнопку и контейнер результатов,
<p><button>Get Result</button><div id="result"></div></p>
Отредактируйте renderer.js
и вставьте образец кода, который мы использовали в следующем примере.Дополнительно используйте эти строки,
document.querySelector("button").addEventListener("click", async function() {
const result = await scraper("http://example.com");
document.querySelector("#result").innerHTML = result;
});
Теперь откройте package.json и добавьте эти параметры, чтобы мы могли запустить двоичный файл хрома,
"build": {
"extraResources": "node_modules",
"files": [
"!node_modules"
]
}
Теперь соберите приложение,
electron-builder
Откройте папку dist
, и вы получите свои пакеты приложений.Вы можете запустить и получить результат,