美文网首页
ZZOpenLibs改造

ZZOpenLibs改造

作者: 炙热地瓜 | 来源:发表于2019-01-28 15:27 被阅读0次

    ZZOpenLibs改造问题

    问题

    1. 在vue文件的ts写法中,使用require引入libs里面的js,如下
    const ZZAPP = require('@zz-vc/zz-open-libs/lib/libs/adapter');
    

    由于js为esModule,所以引入的属性、方法会通过default传递,虽然不影响我们使用,但是并不是我们期望的应用方式。
    2.在vue文件的ts写法中,使用import引入libs里面的js,如下

    import ZZAPP from '@zz-vc/zz-open-libs/lib/libs/adapter';
    
    image.png

    悲剧了没有ts的.d.ts声明文件,引入不了。

    解决

    1.曝露方法的聚合,留到下面第3点一起写
    2.自己写?...懒得写,找点自动生成的吧,找个cli-->dtsmake,
    使用如下

    npm i dtsmake -g   // 先全局安装dtsmake
    
    dtsmake -s ./xx.js  // 在对应的文件生产文件
    

    坑:dtsmake需要依赖一个包 tern,安装到目标文件xx.js的父目录,
    生成的.d.ts文件也会有点问题,手动删处了一条报错代码,


    image.png

    别问我为啥删...我也不知道,反正我删了文件就能用了~~~
    理想情况:如果我引入的adapter不是一个js而是一个包,我觉的会好很多,例如 vue-property-decorator这个包


    image.png
    3.核心改造--->
    步骤一,node包聚合,
    //导出部分
    const ZZAPP = require('./lib/libs/adapter').default
    exports.ZZAPP = ZZAPP
    
    //导入部分
    const libs = require('@zz-vc/zz-open-libs')
    

    第一步成功。
    第二步,加入esModule支持,

    'use strict';
    
    Object.defineProperty(exports, "__esModule", {
        value: true
    });
    const ZZAPP = require('./lib/libs/adapter').default
    //node模块支持
    exports.ZZAPP =ZZAPP
    //es模块支持
    exports.default ={ZZAPP}
    
    //导入
    import ZZAPP from '@zz-vc/zz-open-libs';
    

    第二步成功,在module.exports里面和default里面都曝露出想要都内容。
    第三步,ts支持,编写index.d.ts声明文件,我了去这个生成不了只能自己写

    //导出
    import ZZAPP = require('./lib/libs/adapter');
    declare module 'ZZAPP' {
      export = ZZAPP;
    }
    
    //导入
    import libs from '@zz-vc/zz-open-libs';
    

    但是下面写法不行~~~

    import {ZZAPP} from '@zz-vc/zz-open-libs';
    

    改为

    //导出
    import ZZAPP = require('./lib/libs/adapter');
    declare module 'ZZAPP' {
      export = ZZAPP;
    }
    export {ZZAPP};
    

    现在import {ZZAPP} 也已经支持了。

    相关文章

      网友评论

          本文标题:ZZOpenLibs改造

          本文链接:https://www.haomeiwen.com/subject/uzkmjqtx.html