将 Node.js 项目打包为可执行文件 Pkg

将 Node.js 项目打包为可执行文件 Pkg

MIT
JavaScript
跨平台
2019-05-20
左华栋

此命令行界面使您可以将Node.js项目打包为可执行文件,甚至可以在未安装Node.js的设备上运行。

用例

  • 在没有来源的情况下制作商业版的应用程序
  • 在没有来源的情况下制作应用的演示/评估/试用版
  • 立即为其他平台制作可执行文件(交叉编译)
  • 制作某种自解压存档或安装程序
  • 无需安装Node.js和npm来运行打包的应用程序
  • 无需下载数百个文件npm install来部署您的应用程序。将其部署为单个文件
  • 将您的资产放在可执行文件中,使其更具可移植性
  • 针对新的Node.js版本测试您的应用程序而不安装它

用法

npm install -g pkg

安装后,运行pkg --help不带参数以查看选项列表。

项目的入口点是强制CLI参数。它可能是:

  • 输入文件的路径。假设它是/path/app.js,然后打包应用程序将以相同的方式工作node /path/app.js
  • 路径package.jsonPkg将遵循bin指定的属性package.json并将其用作条目文件。
  • 目录的路径。Pkgpackage.json在指定的目录中查找。往上看。

目标

pkg可以一次为多个目标计算机生成可执行文件。您可以通过--targets 选项指定以逗号分隔的目标列表。规范目标由3个元素组成,例如用短划线分隔,node6-macos-x64或者node4-linux-armv6

  • nodeRange节点$ {n}或最新
  • 平台 freebsd,linux,alpine,macos,win
  • arch x64,x86,armv6,armv7

您可以省略任何元素(并仅指定node6)。省略的元素将从当前平台或系统范围的Node.js安装(其版本和拱门)中获取。还有一个别名host,这意味着所有3个元素都取自当前的platform / Node.js。默认情况下,目标是 linux,macos,win针对当前的Node.js版本和arch。

配置

在打包过程中,pkg解析您的源,检测调用require,遍历项目的依赖项并将它们包含在可执行文件中。在大多数情况下,您无需手动指定任何内容。但是,您的代码可能有require(variable)调用(所谓的非文字参数require)或使用非JavaScript文件(例如视图,CSS,图像等)。

  require('./build/' + cmd + '.js')
  path.join(__dirname, 'views/' + viewName)

此类案件不予处理pkg。因此,您必须在文件的pkg属性中手动指定文件 - 脚本和资产package.json

 "pkg": {
    "scripts": "build/**/*.js",
    "assets": "views/**/*"
  }

您还可以指定globs数组:

 "assets": [ "assets/**/*", "images/**/*" ]

请务必致电pkg package.jsonpkg .使用scriptsassets输入。

脚本

scripts水珠 或水珠的列表。指定为的文件scripts将使用编译v8::ScriptCompiler并放入可执行文件而不使用源。它们必须符合您所定位的Node.js版本的JS标准(参见目标),即已经过编译。

资产

assets水珠 或水珠的列表。指定的文件assets将作为原始内容打包为可执行文件而不进行修改。Javascript文件也可以指定assets。他们的消息来源不会被剥夺。它提高了这些文件的执行性能并简化了调试。

另请参阅 检测源代码和 快照文件系统中的资产

选项

可以使用运行时选项(属于Node.js或V8)调用Node.js应用程序。列出他们的类型node --help或 node --v8-options。您可以将这些运行时选项“烘焙”到打包的应用程序中。应用程序将始终在打开选项的情况下运行。只需--从选项名称中删除。

pkg app.js --options expose-gc
pkg app.js --options max_old_space_size=4096

产量

您可以指定--output是仅创建一个可执行文件还是--out-path为多个目标放置可执行文件。

调试

通过--debugpkg获得一个日志包装过程。如果您遇到某些特定文件的问题(似乎没有打包成可执行文件),查看日志可能会很有用。

建立

pkg有所谓的“基本二进制文件” - 它们实际上是相同的 node可执行文件,但应用了一些补丁。它们用作每个可执行文件pkg创建的基础。pkg 在打包应用程序之前下载预编译的基本二进制文件。如果您更喜欢从源代码编译基本二进制文件而不是下载它们,您可以将--build 选项传递给pkg。首先确保您的计算机满足编译原始Node.js:BUILDING.md的要求

打包应用的用法

对打包应用程序的命令行调用./app a b相当于node app.js a b

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

pkg 4.4.0 发布,将 node.js 连同环境打包成二进制文件

- 支持 node.js 12 - 不检查工作线程中的PKG_DUMMY_ENTRYPOINT - path.resolve argv [1]用于非默认入口点。 修正了 #671 此命令行界面使您可以将Node.js项目打包为可执行文件,甚至可以在未...

05/22 09:30

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

前端开发利器-grunt

> 最近看了下angular,顺便就看到了前端自动化构建工具grunt Grunt和 Grunt 插件是通过 [npm](https://npmjs.org/) 安装并管理的,npm是 [Node.js](http://nodejs.org/) 的包管理器。*Grunt ...

2016/06/02 09:48
53
1
NPM 入门使用

> 最近在折腾 hexo 的更新,遇到了一些问题,正好使用 npm 进行包管理,顺便研究了下 npm 的一些常用命令 # NPM是什么 NPM(node package manager),通常称为node包管理器。顾名思义,它的主...

2016/11/11 17:42
46
0
【AngularJs学习笔记四】Grunt+Bower+Requirejs+Angular

#0 系列目录# - AngularJs学习笔记 - [【AngularJs学习笔记一】Bower解决js的依赖管理](http://my.oschina.net/xianggao/blog/607613) - [【AngularJs学习笔记二】Yeoman自动构建js项目](htt...

2016/01/25 10:36
923
1
一步步创建自己的npm插件

我们经常是用npm install xxx命令安装不同的开发库,是否有想过把自己常用的代码也做成npm插件的形式分享出去呢??!!!本文将为你详细的介绍怎么创建属于自己的npm插件。...

2015/12/08 00:31
832
0
使用npm打包nodejs程序包并发布到npm上

使用npm打包nodejs程序包并发布到npm上

2016/06/03 09:38
136
0
【译文】为何我热爱Node.js: Promises, Express, 和CLI?

本文作者讲了他为什么热爱Node.js,并从promise,express,和cli命令行三方面来阐述热爱的原因,这3方面确实是Node.js的核心内容,文中有若干npm模块推荐,是非常值得参考和解决的!...

2016/02/20 11:16
78
1
node:md-server

Edit your file with your favourite editor and get the result in the browser when you save the file. [https://www.npmjs.com/package/md-server](https://www.npmjs.com/package/md-se...

2015/12/12 22:38
34
0
数据持久化,判断用户登录信息session和cookie

cookie-parser、express-session以及connect-mongo

2016/06/01 17:30
82
0
Install Node.js/NPM/Bowr on windows[permission]

在有白名单和系统权限受限的机器上配置Node.js/npm/Bower,自己直接写在confluence上的,不转义了。

2016/03/25 15:25
33
1

没有更多内容

加载失败,请刷新页面

返回顶部
顶部