Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/toyobayashi/asar-node
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
https://github.com/toyobayashi/asar-node
Last synced: 11 days ago
JSON representation
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
- Host: GitHub
- URL: https://github.com/toyobayashi/asar-node
- Owner: toyobayashi
- License: mit
- Created: 2018-11-18T08:47:33.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2022-09-25T08:49:54.000Z (about 2 years ago)
- Last Synced: 2024-10-11T20:58:33.652Z (27 days ago)
- Language: JavaScript
- Size: 1.77 MB
- Stars: 16
- Watchers: 1
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# 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
``` bash
$ npm install -g asar-node
`````` bash
$ 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
``` bash
$ npm install asar-node
``````js
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
``` js
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').addAsarToLookupPathsregister()
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
``` js
require('asar-node')
```v2.x / v3.x
``` js
require('asar-node/lib/autorun/index')
```## Standalone builds
* `node_modules/asar-node/dist/index.js`
Library bundle.
```js
const {
register,
addAsarToLookupPaths
} = require('asar-node/dist/index.js')
// Equivalent to require('asar-node')
```* `node_modules/asar-node/dist/asar-node.js`
CLI bundle.
```bash
$ node ./node_modules/asar-node/dist/asar-node.js [...]
# Equivalent to
$ asar-node [...]
```* `node_modules/asar-node/dist/autorun.js`
Preload bundle.
```bash
$ node -r ./node_modules/asar-node/dist/autorun.js [...]
``````js
require('asar-node/dist/autorun.js')
require('./path/to/app.asar/index.js')
``````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.
```bash
$ node -r ./node_modules/asar-node/dist/autorun-register.js [...]
``````js
require('asar-node/dist/autorun-register.js')
require('./path/to/app.asar/index.js')
``````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.
```js
// 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](https://www.npmjs.com/package/asar)**
* **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**