我想将一个较大的node.js cli应用程序捆绑到一个.js文件中。 我的代码结构如下:
|- main.js
|--/lib
|----| <bunch of js files>
|--/util
|----| <bunch of js files>
...etc
我可以使用browserify将整个事物捆绑到一个文件中,使用main.js作为入口点,但Browserify假定运行时环境是一个浏览器并替换其自己的库(例如browserify-http
代替http
})。所以我正在寻找browserify-for-node
命令
我试过了
$ browserify -r ./main.js:start --no-builtins --no-browser-field > myapp.js
$ echo "require('start') >> myapp.js
但是当我尝试运行$ node myapp.js
时,我遇到了一堆错误。
我们的想法是,除核心节点依赖项之外的所有依赖项的整个应用程序现在都在一个源文件中,并且可以使用
运行 $ node myapp.js
更新
=============
以下JMM的答案有效,但仅适用于我的机器。捆绑仍然不捕获所有依赖项,所以当我尝试在另一台机器上运行该文件时,我会遇到依赖性错误,如
ubuntu@ip-172-31-42-188:~$ node myapp.js
fs.js:502
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: ENOENT, no such file or directory '/Users/ruchir/dev/xo/client/node_modules/request/node_modules/form-data/node_modules/mime/types/mime.types'
答案 0 :(得分:1)
查看--node
选项以及其中包含的其他更精细的选项。
答案 1 :(得分:0)
您可以使用Zeit的pkg并按照以下步骤操作:
npm i pkg -g
然后在NodeJS项目的JSON包中包含以下内容:
"pkg": {
"scripts": "build/**/*.js",
"assets": "views/**/*"
}
"main": "server.js"
在内部主要参数中写入要用作包入口点的文件的名称。
之后,在NodeJS项目的终端中运行以下命令
pkg server.js --target=node12-linux-x64
或者您可以从上方删除目标参数以构建适用于Windows,Linux和Mac的软件包。
生成软件包后,您必须授予写权限:
chmod 777 ./server-linux
然后您可以在终端中通过以下方式运行它
./server-linux
此方法将为您提供可执行文件,而不是单个.js文件