是什么

首先,此gojs非彼gojs(图表库)

该工具将 webpack "内嵌",可以很方便快捷的"搭建"一个commonjs前端执行环境。 只需要全局安装 npm i -g go-js

概念

go-js 认为一个js文件就是一个入口(entry)

特征

  1. 程序运行时,自动下载依赖包

    • js文件中静态import/require的依赖
  2. 入口动态添加,如:

    文件目录结构如下:

    go-js-test/
    ├── a/
    │   ├── a/
    │   ├── jq.html
    │   ├── jq.js
    │   ├── style.css
    │   └── style.less
    ├── jq.js
    └── react.js
    
    1. go-js-test/ 下执行 gojs .
    2. 请求 /jq.js
    3. 添加 jq.js 至入口中, webpack building....
    4. 请求 a/jq.js
    5. 添加 a/jq.js 至入口中, webpack building....
  3. 颗粒化 webpack compiler 和 HMR 的处理

    在第二点(入口动态添加)中,对于jq.jsa/jq.js两个入口,分别各自对应webpack compiler 和 HMR 单元。 也就是说,jq.jsa/jq.js是两个相互独立的webpack处理单元。 那么这样给我们带来什么便利呢?

    1. 如果jq.js中出错,在a/jq.js中是不被察觉的。
    2. 后面加入的a/jq.js入口,不影响jq.js入口,所以之前对jq.js的webpack bundle cache是依然生效的。(对比与 一股脑将2个入口重新用一个webpack单元处理)

适用于

适用于一些小型项目或者demo的快速搭建开发。 如,package.json

{
    ...
    "scripts": {
        "start": "gojs -i demo.js"
    },
    ...
    "devDependencies": {
        "go-js": "^1.2.4"
    }
}

用户只需要执行

npm install && npm start

就可以直接看到demo.js了!

预览

使用

  • cli
npm install -g go-js
gojs -h  # 查看帮助
  • package
const GoJS = require('go-js')
const gojs = new GoJS({
    verbose: true,
    path: '.',
    type: 'js',
    port: null
})

gojs.start(function(error, port) {
    console.log('server listening on '+port)
    
    // gojs.stop()
})

gojs.on('error', error => {})
gojs.on('server', port => {})
gojs.on('request', (req, res, start) => {})
gojs.on('addEntry', entry => {})
gojs.on('rmEntry', entry => {})
gojs.on('watch', (type, filePath) => {})