0.1.12 • Published 2 years ago

@iot-studio/material-loader v0.1.12

Weekly downloads
-
License
MIT
Repository
gitlab
Last release
2 years ago

基于 fetch 的简易js模块加载器

fork 自 @bone/loader http://gitlab.alibaba-inc.com/bone/floader

使用方式

本加载器不需要修改js文件的打包方式,按照以下方式使用。

1. 引入加载器

    <script src="//g.alicdn.com/bone/loader/1.1.0/index.js"></script>

加载器引入之后,在window上会挂载一个全局的loader函数对象。

2. 注册模块

在每个js文件中,加入以下代码

    loader.register(module);

3. 使用模块

    const module = loader(moduleId);

这里的moduleId默认是js的url地址

4. 异步加载一个js文件

    loader.async("xxx/yyy.js", function(module){
        // do something
    });

    loader.async([
        "xxx/module1.js",
        "xxx/module2.js"
    ], function(module1, module2){
        // do something
    });

在html中访问loader

可以在script标签上通过global-name指定loader挂载在window上的名称

    <script src="//g.alicdn.com/bone/loader/1.1.0/index.js" global-name="myLoader"></script>
    <script>
        myLoader.async("xxx.js", function(xxx){ ... });
    </script>

在js项目中访问loader

通过bnpm安装@bone/loader

import loader from "@bone/loader";
loader.async("xxx.js", function(xxx){ ... });

示例

a.js

    loader.register(1);

b.js

    loader.register(2);

main.js

    function load(url){
        return new Promise(function(resolve){
            loader.async(url, resolve);
        });
    }

    Promise.all([
        load("a.js"),
        load("b.js")
    ]).then(function(a, b){
        console.log(a + b === 3);
    });

插件开发

支持以插件的方式修改loader的行为,目前支持以下3个插件修改点

load

加载一个模块

loader.plugin("load", function(info){
    // 修改加载的url
    info.url = "xxx";
    return info;
});

register

注册一个模块

loader.plugin("register", function(info){
    // 修改模块ID
    info.moduleId = "xxx";
    return info;
});

get

获取一个模块

loader.plugin("get", function(info){
    // 修改模块ID
    info.moduleId = "xxx";
    return info;
});

combo插件

使用combo插件,会对同时发起的多个请求进行合并,减少http请求数

引入combo插件

    <script src="//g.alicdn.com/bone/loader/1.1.0/plugins/combo.js"></script>

效果

    loader.async([
        "xxx/module1.js",
        "xxx/module2.js"
    ], function(module1, module2){
        // do something
    });

加载两个模块时,实际发出的请求为 xxx/??module1.js,module2.js

0.1.10

2 years ago

0.1.11

2 years ago

0.1.12

2 years ago

0.1.12-beta.6

2 years ago

0.1.12-beta.5

2 years ago

0.1.12-beta.7

2 years ago

0.1.12-beta.2

2 years ago

0.1.8

2 years ago

0.1.12-beta.1

2 years ago

0.1.7

2 years ago

0.1.12-beta.3

2 years ago

0.1.9

2 years ago

0.1.12-beta.0

2 years ago

0.1.6

3 years ago

0.1.0-alpha.7

3 years ago

0.1.0-alpha.6

3 years ago

0.1.3

3 years ago

0.1.5

3 years ago

0.1.0-alpha.4

3 years ago

0.1.0-beta.1

3 years ago