请教一下, js 项目打包,发布 lib 和相关 type 方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
yazoox
V2EX    Javascript

请教一下, js 项目打包,发布 lib 和相关 type 方法

  •  
  •   yazoox 2021-03-19 07:18:36 +08:00 3942 次点击
    这是一个创建于 1677 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般,js 项目,webpack 打包后,只要把 dist 目录下的所有文件,部署到 aws 等云服务,就可以工作了!

    那么,如果我提供了一些 api,发布到 npm ?需要啥特别处理 /流程么?尤其是,要支持 typescript,怎么处理?好像是要生成一个 custom.d.ts 文件!这个能自动生成么?

    以及,想使用的第三方类库,没有提供 type,我自己的 typescript 项目如何使用?

    有没有相关文档,介绍的比较好的!?

    搜索了一下,暂时没找到写得比较好。 特来向大家请教一下

    12 条回复    2021-03-19 16:00:31 +08:00
    yanguoyu
        1
    yanguoyu  
       2021-03-19 09:11:14 +08:00
    如果你要写 lib 库,可以尝试用这个 https://github.com/yanhaijing/jslib-base,至于使用的第三方库没有 declared 文件,那就需要自己定义,可以看 ts 官方文档或者翻译文档。
    中文: https://www.tslang.cn/docs/handbook/declaration-files/introduction.html
    英文: https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html
    vcfvct
        2
    vcfvct  
       2021-03-19 09:18:28 +08:00 via iPhone
    Type 的话 tsc 可以生成,一般 lib 的话也可以把所以相关类放在 index.ts ,这样别人就可以直接从你 lib 的 root import 了.
    后端 bundle 也可以试试 esbuild,treeshaking 什么的比较,速度飞快。
    vcfvct
        3
    vcfvct  
       2021-03-19 09:19:47 +08:00 via iPhone
    当然 index 里是 export 一下,不是真正的所以 source
    musi
        4
    musi  
       2021-03-19 09:20:08 +08:00
    蹲一个好用的方案
    ccraohng
        5
    ccraohng  
       2021-03-19 09:42:48 +08:00 via iPhone
    如果不是 ts 写的,package.json 指定 typings 字段。
    如果是 ,打开输出 dts 选项。
    或者发布 @types
    为第三库写申明 搜一下应该蛮多的,
    hupo0
        6
    hupo0  
       2021-03-19 09:49:25 +08:00
    你可以参考别人的库是怎么打 npm 包和发布的,比如说我的。
    hupo0
        7
    hupo0  
       2021-03-19 09:50:20 +08:00
    @hupo0 我靠,我想换行怎么就发出去了。
    https://github.com/Iplaylf2/no-stream
    主要看顶级目录,package.json 和 gulpfile.js 。
    LOWINC
        8
    LOWINC  
       2021-03-19 09:54:46 +08:00
    zhuweiyou
        9
    zhuweiyou  
       2021-03-19 13:12:46 +08:00
    如果你是 TS 写的, tsc 可以直接编译产出 d.ts
    如果你是 JS 写的,据我所知得手写
    wobuhuicode
        10
    wobuhuicode  
       2021-03-19 14:37:24 +08:00
    很简单,package.json 指定一个 .d.ts 文件就可以了
    "types": "index.d.ts"
    ruoxie
        11
    ruoxie  
       2021-03-19 15:16:56 +08:00
    fox2081
        12
    fox2081  
       2021-03-19 16:00:31 +08:00
    如果是 TS 项目,会自动生成 dts,但是是一对一的,不会打包成一个,想打包的话 rollup 、webpack 都有提供一些插件,但效果都不慎理想,之前打包类库有用过一个 rollup-plugin-dts,项目代码一多,到时候声明文件就不是人能看懂的了。TS 现在已经不推荐使用 namespace 和 module 了,但是 dts 里面还是挺好用的,后面还是通过自动生成的手动整理。

    JS 项目想生成 dts 估计不太靠谱。

    支持 ts,就要在 package.json 中的 typings 中指向你项目中的 dts 文件,文件名没关系,就行 main 这样的入口文件。

    第三方类库如果没有自带声明,可以搜 @types/xxx,额外安装声明文件,不冷门的基本都有,没有的话在你项目内容可以“帮”他写,一般是 declare module 'xxx',放在你 tsconfig 包含的目录里。

    dts 是解除 ts 之后就让人爱不释手的东西,即使是 js 项目,编辑器也可以根据其他项目的 dts 提供智能提示,我现在公司调用后端的接口就是通过后端扫描数据结构和接口路由自动生成并发布的一个项目,声明文件截至目前有 16325 行,打包之后的代码只有 12kb,里面有 10kb 还是后端生成的枚举文件,使用起来接口地址、参数定义、返回格式统统智能提示都提供,如果是 ts 项目,接口更新会直接在编译时把需要改的地方列出来,平时开发直接不用查文档,组员用过都说好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3652 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:29 PVG 18:29 LAX 03:29 JFK 06:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86