Skip to content

Enable require('./path/to/any-node-project.asar') & require('./path/to/any-node-project.asar/any/file'). Or just run asar-node ./path/to/any-node-project.asar

License

Notifications You must be signed in to change notification settings

toyobayashi/asar-node

Repository files navigation

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()
// 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.asar

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')
    // Equivalent to require('asar-node')
  • node_modules/asar-node/dist/asar-node.js

    CLI bundle.

    $ node ./node_modules/asar-node/dist/asar-node.js [...]
    # Equivalent to
    $ 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')
    // app.asar/index.js
    require('mod') // mod could be in node_modules.asar
  • 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')
    // app.asar/index.js
    require('mod') // throws error if mod is in node_modules.asar
  • node_modules/asar-node/dist/autorun-lookup.js

    Preload bundle with node_modules.asar support 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.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

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

About

Enable require('./path/to/any-node-project.asar') & require('./path/to/any-node-project.asar/any/file'). Or just run asar-node ./path/to/any-node-project.asar

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages