Узлу PKG не удается собрать исполняемый файл из приложения, использующего EJS - PullRequest
0 голосов
/ 25 марта 2019

У меня есть приложение Node (HTTP-сервер), которое использует Express и EJS для рендеринга шаблонов.Когда я пытаюсь создать исполняемый автономный файл с помощью pkg (https://github.com/zeit/pkg),), возникает ошибка, указывающая, что ejs не устанавливается, как только я пытаюсь получить доступ к localhost /. Но исходное приложение работает нормально, а EJSУстановлен как другой модуль, кроме Express.

В документах указано, что зависимости учитываются при сборке .exe. Я мог видеть, что это работает, потому что запросы на кэширование базы данных с модулем mysql выполняются нормально.быть проблемой, специфичной для EJS, может быть потому, что она не 'require () d', а выбрана в качестве движка шаблонов в опциях Express.

Как бы просто это ни было, кто-нибудь сталкивался с чем-то подобным?погуглил, но не нашел ничего связанного с ошибками в ejs после сборки проектов с помощью pkg.

трассировки стека:

Error: Cannot find module 'ejs'
1) If you want to compile the package/file into executable, please pay attention to compilation warnings and specify a literal in 'require' call. 2) If you don't want to compile the package/file into executable and want to 'require' it from filesystem (likely plugin), specify an absolute path in 'require' call using process.cwd() or process.execPath.
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:592:15)
    at Function.Module._resolveFilename (pkg/prelude/bootstrap.js:1280:46)
    at Function.Module._load (internal/modules/cjs/loader.js:518:25)
    at Module.require (internal/modules/cjs/loader.js:648:17)
    at Module.require (pkg/prelude/bootstrap.js:1159:31)
    at require (internal/modules/cjs/helpers.js:20:18)
    at new View (C:\snapshot\Eduardo\node_modules\express\lib\view.js:81:14)
    at Function.render (C:\snapshot\Eduardo\node_modules\express\lib\application.js:570:12)
    at ServerResponse.render (C:\snapshot\Eduardo\node_modules\express\lib\response.js:1008:7)
    at C:\snapshot\Eduardo\Desktop\node eureka\app.js:0:0

1 Ответ

0 голосов
/ 06 июля 2019

Чтобы использовать EJS с PKG, я просто изменил некоторые настройки в своих файлах.

В app.js Я только что добавил папку views в качестве статического ресурса.

app.js:

app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'views'))); // Line exists just for PKG

В package.json вам необходимо указать свои активы и начальную точку.

package.json:

...
"main": "app.js",
"bin": "app.js",
...
"pkg": {
    "assets": ["views/**/*", "public/**/*"]
  }

И что более важнопо моему мнению, потому что это привело к головной боли, при компиляции с использованием PKG вам нужно указать, что вы компилируете весь проект в папке, так как он должен найти файл package.json и перейти оттуда, чтобы увидеть, что этоneeds.

Использование: pkg .

Я получаю сообщение об ошибке, которое вы опубликовали, когда я компилировал, используя только pkg app.js, и вместо этого использовал pkg ., исправил проблему по большей части,Технически вы можете пропустить изменения в app.js, но это изменение гарантирует, что папка views включена в двоичный файл, так как простое добавление ее в файл package.json в разделе assets, похоже, само по себе не работает,(Также обратите внимание, что использование path.join необходимо)

...