asar-node v3.1.1
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.nodeProgramming
$ npm install asar-noderequire('asar-node').register()
// Equivalent to require('asar-node/lib/register.js').register()
require('./path/to/any-node-project') // like require a nodejs directory
// or require('./path/to/any-node-project.asar')
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')
// Equivalent to
// const register = require('asar-node/lib/register.js').register
// const addAsarToLookupPaths = require('asar-node/lib/lookup.js').addAsarToLookupPaths
register()
addAsarToLookupPaths()
const Koa = require('koa') // koa is in node_modules.asarIn 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.jsLibrary bundle.
const { register, addAsarToLookupPaths } = require('asar-node/dist/index.js') // Equivalent to require('asar-node')node_modules/asar-node/dist/asar-node.jsCLI bundle.
$ node ./node_modules/asar-node/dist/asar-node.js [...] # Equivalent to $ asar-node [...]node_modules/asar-node/dist/autorun.jsPreload bundle.
$ node -r ./node_modules/asar-node/dist/autorun.js [...]require('asar-node/dist/autorun.js') require('./path/to/app.asar/index.js')// app.asar/index.js require('mod') // mod could be in node_modules.asarnode_modules/asar-node/dist/autorun-register.jsPreload bundle without
node_modules.asarsupport.$ node -r ./node_modules/asar-node/dist/autorun-register.js [...]require('asar-node/dist/autorun-register.js') require('./path/to/app.asar/index.js')// app.asar/index.js require('mod') // throws error if mod is in node_modules.asarnode_modules/asar-node/dist/autorun-lookup.jsPreload bundle with
node_modules.asarsupport only, useful for electron environment.// webpack electron target import 'asar-node/dist/autorun-lookup.js' // 1KB minified
Available APIs inside asar
require('original-fs')fs.readFileSync/fs.readFile/fs.promises.readFilefs.statSync/fs.stat/fs.promises.statfs.lstatSync/fs.lstat/fs.promises.lstatfs.readdirSync/fs.readdir/fs.promises.readdirfs.existsSync/fs.existsfs.accessSync/fs.access/fs.promises.accessfs.realpathSync/fs.realpath/fs.realpathSync.native/fs.realpath.native/fs.promises.realpathfs.copyFileSync/fs.copyFile/fs.promises.copyFilefs.openSync/fs.open/fs.promises.openfs.createReadStreamchild_process.execFilechild_process.execFileSync
Note
- If your nodejs project use C++ native addons, please unpack it from asar file by specifying
--unpack=*.nodeto 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
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago