如何Node.js项目打包为一个可执行文件

代码拓荒家
• 阅读 6031

如何将Node.js项目打包为一个可执行文件

PKG
  • pkg可将Node.js项目打包为一个单独的可执行文件,可在未安装Nodejs的机器上运行。支持win、linux等多系统。
  • pkg的打包原理简单来说,就是将js代码以及相关的资源文件打包到可执行文件中,然后劫持fs里面的一些函数,使它能够读到可执行文件中的代码和资源文件。
用法

pkg使用比较简单,执行下pkg -h就可以基本了解用法,基本语法是:pkg [options] <input>

<input>可以通过三种方式指定:

1.一个脚本文件,例如pkg index.js;
2.package.json,例如pkg package.json,这时会使用package.json中的bin字段作为入口文件;
3.一个目录,例如pkg .,这时会寻找指定目录下的package.json文件,然后在找bin字段作为入口文件。

[options]中可以指定打包的参数:
1.-t指定打包的目标平台和Node版本,如-t node6-win-x64,node6-linux-x64,node6-macos-x64可以同时打包3个平台的可执行程序;
2.-o指定输出可执行文件的名称,但如果用-t指定了多个目标,那么就要用--out-path指定输出的目录;
3.-c指定一个JSON配置文件,用来指定需要额外打包脚本和资源文件,通常使用package.json配置。

使用:

在package.json中的pkg字段中指定打包参数,使用npm scripts来执行打包过程,例如:

{
...
"scripts": {
"build": "pkg index.js"
}
}

关于项目中的配置文件处理,如环境变量等。因为这些配置文件会跟着不同的部署环境进行更改,所以为了方便更改,一般不希望把配置文件打包到exe。为了避免pkg自动地将配置文件打包到exe中,代码中不要采用__dirname, 而是采用相对于process.cwd()的方法读取:

// 不推荐
const config = require((path.join(__dirname, './config.js'))
 
// 推荐
const config = require(path.join(process.cwd(), './config.js'));
点赞
收藏
评论区
推荐文章
放学路上 放学路上
4年前
vscode+vue简单安装教程
1、安装vscode、node.js。2、打开vscode终端,全局安装vuecli:npminstallgvuecli用于构建项目。3、继续安装webpack(打包工具):npminstallgwebpack。4、安装完成创建一个文件夹用于存放项目,比如myvue,cd到该文件夹,使用项目创建命令:vueinitwebpackmyvue。
橘子橙 橘子橙
4年前
vue-element-admin项目打包后,iconfont图标出现乱码
使用vueelementadmin或者vueelementtemplate开发的项目,打包到线上,就出现了图标乱码,f12后能看到icon元素为.eliconclose:before{content:"□"}的情况(如下)
梦
4年前
nodejs打包成为exe可执行文件
nodejs打包成为exe可执行文件需要将nodejs写的项目运行到客户机上,客户机可能没有node环境,所以需要将其打包目前上手使用的是pkgnpminstallpkgg生成exe文件,window环境pkgtwind:/index.jsoindex.exehttps://github.com/zeit/pkgfetch/releas
皮卡皮卡皮 皮卡皮卡皮
4年前
webpack 基本配置
概念本质上,webpack是一个现代JavaScript应用程序的静态模块打包器(modulebundler)。当webpack处理应用程序时,它会递归地构建一个依赖关系图(dependencygraph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle。安装确保安装了nodejs项目文件环境cd
Stella981 Stella981
4年前
Electron中通过asar打包后ffi
在使用Electron开发完应用程序后,需要打包生成各平台对应的可执行文件供用户使用。这里以Mac平台为例,最简单的打包方案是使用electronpackager来对应用程序进行打包操作,如执行最简单的指令electronpackager.执行完成后会在同级目录生成${appName}${platfomr}${arch}目录如e
Stella981 Stella981
4年前
Grunt学习笔记【8】
本文主要讲如何用Grunt打包AngularJS的模板HTML。一说明AngularJS中使用单独HTML模板文件的地方非常多,例如:自定义指令、nginclude、templateUrl等。通常这些文件都是独立的html文件,AngularJS中使用这些文件都是通过文件路径地址引用的。当用Grunt打包压缩整个项目时,如何处理这些
Wesley13 Wesley13
4年前
3、electron打包生成exe文件
打包方式1:DOS窗口命令打包DOS下,输入 npminstallelectronpackagerg全局安装我们的打包神器:cnpminstallelectronpackagerg在项目文件夹下面,也就是根目录下面打开DOS执行打包命令:electronpacka
Stella981 Stella981
4年前
Maven
在项目pom.xml中指定<build<resources<resource<!控制资源目录下要打包进去的文件,这里为全部打包<directorysrc/main/resources
Stella981 Stella981
4年前
Linux下部署springboot项目的步骤及过程
最近在研究将springboot项目部署到Linux服务器上,由于springboot是内嵌了tomcat,所以可以直接将项目打包上传至服务器上。我是在idea上的项目,所以我就基于此说下过程。(一)打包你的项目1、在pom文件中添加springboot的maven插件 !(https://img2018.cnblogs.com/blog/1
Stella981 Stella981
4年前
ASP.NET Core 静态资源的打包与压缩
以VisualStudioCommunity201715.5.1为例配置文件bundleconfig.json新建一个AspNetCoreMVC项目,项目中会有一个bundleconfig.json文件,该文件就是静态资源打包与压缩的配置文件.通常bundleconfig.js
Wesley13 Wesley13
4年前
JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载
将文件夹保留目录打包为ZIP压缩包并下载上周做了一个需求,要求将数据库保存的html界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台;在数据库中保存的是html标签,查出后,我把这些内容写入css和js等其他文件所在目录的一个文件内,然后将这整个文件夹压缩打包下载,