TypeScript 封装并发布一个库

开始之前

使用TypeScript封装一个定时清除localStore的方法。项目中token的信息保存在了localStorage里面了。localStorage中除非手动删除不然就一直留存在浏览器里面。另一个是当token过期时,只有发起一个请求才能感知,如果提前从浏览器中间将要过期的token删除,通知用户重新登录,就能节省一次链接。

NPM 初始化项目

npm init 

根据自己的情况设置 name, version, description, entry point 以及后面的内容。
这里在的entry point 指的是以后使用这个包要引入的文件,不是编译的入口文件


图1

完成后创建一个tsconfig.json的文件

tsc --init

创建完成需要配置几个配置项

  1. "declaration": true, 编译后生成ts声明文件

  2. "outDir": "./dist", 编译后文件输出路径

  3. 在 compilerOption 属性外配置, 在打包的时候排除的文件

    "exclude": [
      "./dist",
    ]
    
  4. 安装 TypeScript 依赖,typescript 只在编译的时候用到

    npm install typescript -D
    

ExpiredStorage 实现

class ExpiredStorage{
    private source:Storage;
    constructor(source:Storage = window.localStorage){
        this.source = source;
        this.initRun();
    }
    initRun(){
        const reg = new RegExp('__expires__');
        let data = this.source;
        let list =  Object.keys(data);
        if(list.length > 0){
            list.map((key, v)=>{
                if(!reg.test(key)){
                    let now  = Date.now();
                    let expire = data[`${key}__expires__`] || Date.now() + 1;
                    if(now >= expire){
                        this.remove(key);
                    }
                }
            })
        }
    }
    set(key:string,value:any,expired:number){
        let source = this.source;
        source[key] = JSON.stringify(value);
        if(expired && expired > 0){
            source[`${key}__expires__`] = Date.now() + expired
        }
    }
    get(key:string):any{
        const source = this.source,
        expired = source[`${key}__expires__`]|| Date.now()+1;
        const now = Date.now();
    
        if ( now >= expired ) {
            this.remove(key);
            return;
        }
        const value = source[key] ? JSON.parse(source[key]) : source[key];
        return value;
    }
    remove(key:string){
        const data = this.source,
            value = data[key];
        delete data[key];
        delete data[`${key}__expires__`];
    }
}

export = ExpiredStorage;

编写完成后在运行 tsc 命令会在根目录下生成 dist 文件夹;js 文件是编译生成的文件,.d.ts是typescript的声明文件。

测试

在根目录下创建测试文件夹 example,创建测试文件,并在tsconfig.json中将该文件添加至 exclude 中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="../dist/expired-storage.js"></script>
    <script>
        let ls = new ExpiredStorage();
        ls.set('userId','zhangsan',5000);
        window.setInterval(()=>{
            console.log(ls.get("userId"));
        },1000)
    </script>
</body>
</html>

上传至NPM

  1. 首先到NPM网站进行注册
  2. 在控制台下运行 npm login 进行登录
  3. 根目录下添加 .npmignore 文件, 指定要忽略的文件入添加的测试文件夹
    /example
    
  4. 运行 npm publish 发包
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343