asar-node
Enable require('./path/to/any-node-project.asar')
& require('./path/to/any-node-project.asar/any/file')
in your nodejs app.
Usage
CLI
$ npm install -g asar-node
$ asar-node ./path/to/any-node-project
$ asar-node ./path/to/any-node-project.asar
$ asar-node ./path/to/any-node-project.asar/any/file
$ asar-node ./path/to/any-node-project.asar/any/file.js
$ asar-node ./path/to/any-node-project.asar/any/file.json
$ asar-node ./path/to/any-node-project.asar/any/file.node
Programming
$ npm install asar-node
require('asar-node').register()
require('./path/to/any-node-project')
require('./path/to/any-node-project.asar/any/file')
If require a asar file, make sure there is package.json
and main
field or index.js
/ index.json
/ index.node
in the asar root.
You can also pack node_modules
into node_modules.asar
instead of packing the hole project folder into an asar file.
To let node find modules from node_modules.asar
, You should
const { register, addAsarToLookupPaths } = require('asar-node')
register()
addAsarToLookupPaths()
const Koa = require('koa')
In an electron project, it's unnecessary to call register()
but you can also call addAsarToLookupPaths()
to enable node_modules.asar
support.
To disable asar support, you can set process.noAsar = true
or ELECTRON_NO_ASAR
environmnet variable.
Migration
v1.x
require('asar-node')
v2.x / v3.x
require('asar-node/lib/autorun/index')
Standalone builds
-
node_modules/asar-node/dist/index.js
Library bundle.
const {
register,
addAsarToLookupPaths
} = require('asar-node/dist/index.js')
-
node_modules/asar-node/dist/asar-node.js
CLI bundle.
$ node ./node_modules/asar-node/dist/asar-node.js [...]
$ asar-node [...]
-
node_modules/asar-node/dist/autorun.js
Preload bundle.
$ node -r ./node_modules/asar-node/dist/autorun.js [...]
require('asar-node/dist/autorun.js')
require('./path/to/app.asar/index.js')
require('mod')
-
node_modules/asar-node/dist/autorun-register.js
Preload bundle without node_modules.asar
support.
$ node -r ./node_modules/asar-node/dist/autorun-register.js [...]
require('asar-node/dist/autorun-register.js')
require('./path/to/app.asar/index.js')
require('mod')
-
node_modules/asar-node/dist/autorun-lookup.js
Preload bundle with node_modules.asar
support only, useful for electron environment.
import 'asar-node/dist/autorun-lookup.js'
-
node_modules/asar-node/dist/fork.js
child_process.fork()
entry for bundlers. Copy it to your output path.
const webpack = require('webpack')
module.exports = {
plugins: [
new webpack.DefinePlugin({
ASAR_NODE_FORK_ENTRY: '/path/to/fork.js'
})
]
}
Available APIs inside asar
require('original-fs')
fs.readFileSync
/ fs.readFile
/ fs.promises.readFile
fs.statSync
/ fs.stat
/ fs.promises.stat
fs.lstatSync
/ fs.lstat
/ fs.promises.lstat
fs.readdirSync
/ fs.readdir
/ fs.promises.readdir
fs.existsSync
/ fs.exists
fs.accessSync
/ fs.access
/ fs.promises.access
fs.realpathSync
/ fs.realpath
/ fs.realpathSync.native
/ fs.realpath.native
/ fs.promises.realpath
fs.copyFileSync
/ fs.copyFile
/ fs.promises.copyFile
fs.openSync
/ fs.open
/ fs.promises.open
fs.createReadStream
child_process.execFile
child_process.execFileSync
child_process.fork
- Predefine ASAR_NODE_FORK_ENTRY
if you are using bundler
Note
- If your nodejs project use C++ native addons, please unpack it from asar file by specifying
--unpack=*.node
to asar CLI
- Express or Koa serving static file in asar file is not supported, but you can unpack the static file folder.
- Node.js ESM module is not support