Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/toyobayashi/resworb
https://github.com/toyobayashi/resworb
Last synced: 10 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/toyobayashi/resworb
- Owner: toyobayashi
- Created: 2020-06-18T10:57:55.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2020-06-23T05:57:31.000Z (over 4 years ago)
- Last Synced: 2024-11-05T22:46:10.182Z (about 2 months ago)
- Language: JavaScript
- Size: 328 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# resworb
在 Android Webview 中模拟 Node.js 环境,无需 Webpack 即可 “无缝” 使用 npm 包,支持 Chrome 远程调试。
## 快速开始
``` bash
$ git clone https://github.com/toyobayashi/resworb.git
$ cd resworb/jsruntime
$ npm install
$ npm run build
```把项目导进 Android Studio 运行。
## 用法
``` js
// 只有 resworbready 事件响应之后才能拿到 window.require
window.addEventListener('resworbready', function () {
// 被 require 的模块中和 Node.js 一样可以用 module exports require __dirname __filename
require('./index.js')
})
```## 可用的 Node.js API
除了 `fs` 和 `module`, 这些模块都是从 deno 标准库中移植过来的。
* window.process (partly)
* buffer (window.Buffer)
* path
* timers (window.setImmediate / window.clearImmediate)
* events
* querystring
* url
* util
* fs (partly)
* module (partly)## module 的用法
`module` 中的模块解析逻辑移植于 Node.js,需要传入一个 `fs` 模块,要求至少实现以下接口:
* `fs.readFileSync(path: string, encoding: 'utf8'): string`
* `fs.existsSync(path: string): boolean`
* `fs.statSync(path: string): { isDirectory: () => boolean; isFile: () => boolean; [k: string]: any }`差不多是这样用的:
``` js
import { createModule, makeRequireFunction } from './modules/module.js';const injectBuiltinModules = {
fs: fs, // need implement readFileSync statSync existsSync,
path: path, // optional
// ...
}
const mainModule = createModule(
injectBuiltinModules, // 只有在这里的模块 require 才能拿到
window.location.href // 入口模块的 filename,这里就取 HTML 本地路径 file:///android_asset/index.html
)
// module 不需要手动注入
// createModule 会把 Module 构造函数挂上去 injectBuiltinModules.module === Module
// 这样 require('module') 就可以拿到 Module 构造函数// 暴露到全局
window.module = mainModule
window.exports = mainModule.exports
window.require = makeRequireFunction(mainModule, mainModule)
```详细可以看 `jsruntime` 的源码。