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 · 3446 次点击
    这是一个创建于 1344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般,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   ·   实用小工具   ·   5357 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:53 · PVG 15:53 · LAX 23:53 · JFK 02:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.