【问题标题】:How to package NodeJs project into an executable with zeit/pkg npm package?如何使用 zeit/pkg npm 包将 NodeJs 项目打包成可执行文件?
【发布时间】:2018-01-29 03:33:14
【问题描述】:

我正在尝试使用https://github.com/zeit/pkg npm 包使我的节点应用程序可执行。我尝试过但无法完全理解给定的文档,或者我做错了什么。

使用命令“npm install -g pkg”安装后 我已将入口点放在 package.json 文件中,例如:

"bin": "app.js"

我正在运行这个命令:

pkg .

在此之后,我将获得可以运行的可执行文件。我尝试在 Windows 上运行它使用 proj_name-win 创建的文件,但它不起作用。 谁能解释一下使可执行文件的步骤以及我做错了什么?

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    我做了几件事。

    首先确保将所有开发文件夹中的所需文件添加到 package.json 文件中,并在 pkg 和 scripts 的键名下。如果资产也包括它们

    "pkg": {
         "scripts" : [
              "src/client/websocket/packets/handlers/*.js",
              "src/client/websocket/packets/handlers/Ready.js",
              "src/client/actions/*.js",
              "src/client/actions/ActionsManager.js"
            ]
        }
    

    像这样。如果您有脚本文件之外的资产,则将它们添加为资产键。

    第二个pkg server.js --config package.json 是 server.js 是我的索引文件/起始文件

    如果出现错误,是否缺少某些包等等,然后从相应的位置复制相同的包(主要来自 node_modules)并将其粘贴到可执行文件旁边。

    【讨论】:

      【解决方案2】:

      请添加以下代码以使用 pkg :

      package.json

      "main": "app.js",
      "scripts": {
      "start": "npm start"
       },
      "bin" : "$DIR\node_modules\npm\cli.js"
      

      然后运行命令 pkg .

      注意

      1) 你也可以直接通过命令打包app.js(如果你没有其他资产可以添加到pkg中):

      pkg app.js
      

      2) 它将在您当前的工作目录中创建可执行文件。

      3) 你也可以在“bin”中给出入口点:

      例子:

      package.json

      "main": "app.js",
      "scripts": {
      "start": "npm start"
       },
      "bin" : "./bin/my-bin.js"
      

      bin/my-bin.js

      #!/usr/bin/env node
      
      var join = require('path').join
      var childProcess = require('child_process');
      var args = process.argv.slice(2);
      
       args.unshift(__dirname + '/../'); 
      
      childProcess.exec('npm start', (err, stdout) => {
      if (err) console.log(err);
      console.log(stdout);
      })
      

      然后,在当前工作目录中,

      运行

      pkg .
      

      【讨论】:

        【解决方案3】:

        我发现这个例子最有帮助(它还包括在 package.json 中动态引入脚本和资产的能力): https://github.com/asaf050/loopback-pkg-ready

        我发现这些也有些帮助: http://thecodebarbarian.com/standalone-express-apis-binaries-with-pkg https://mrlithium.blogspot.com/2017/11/compiling-nodejs-app-into-exe-using-pkg.html

        基本上,“pkg”。如果您的 package.json 设置正确,应该可以正常工作。请注意,如果您不指定“-t latest-win-x64”,它将构建所有 3 个操作系统。您还可以在运行服务器时指定节点特定的选项(例如 --options expose-gc)。所以一个包可能看起来像这样: pkg -t 最新的-win-x64 。 --options 暴露-gc

        如果您只使用“.”,那么这应该是您的 package.json 所在的目录,并且您的 package.json 需要像您指定的那样包含 bin 和 main 条目。我不确定为什么需要 bin,因为它看起来和 main 一样。也可以在调用 pkg 的时候指定主文件,像这样: pkg -t latest-win-x64 ./server/server.js --options expose-gc

        同样,“-t”和“--options”是可选的,您只需调用“pkg”即可。或“pkg ./app.js”来构建包。

        您可以发布您收到的错误消息吗?与其单击 .exe,不如从命令行调用 if 来获取日志,或输出到日志文件。对我来说,它没有运行的原因是由于静态文件和动态模块加载,它在构建和运行 .exe 时指定。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-16
          • 2013-06-15
          • 1970-01-01
          • 1970-01-01
          • 2018-09-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多