V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuhangch
V2EX  ›  Node.js

关于 Node 引入的问题

  •  
  •   yuhangch · 2022-03-09 08:51:29 +08:00 · 8520 次点击
    这是一个创建于 751 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对 node 不太熟,想用这个包下载弹幕玩玩,弹幕的解码器文档如下

    https://github.com/Mr-Quin/bilibili-api#Protobuf

    import { decodeDanmaku } from '@mr-quin/bilibili-api/proto'
    
    const buffer = await biliRequest((api) => api.videoDanmakuProto, {
        vid: 'BV1vE411s7kX',
    })
    const danmaku = buffer.map(decodeDanmaku)
    

    下面有这么一句注释

    This is not done internally because the protobuf schema file is quite big and should only be imported when needed.

    看不太懂

    自己用的时候使用

    import { decodeDanmaku } from '@mr-quin/bilibili-api/proto'
    

    提示找不到 proto ,IDE 的 quick fix 之后,import 语句变为

    import {decodeDanmaku} from "@mr-quin/bilibili-api/dist/protobuf/js/parser";
    

    此时可以正常使用了,请 v 友帮忙解释下为什么?

    6 条回复    2022-03-09 13:39:42 +08:00
    noe132
        1
    noe132  
       2022-03-09 09:01:56 +08:00 via Android
    什么 ide ,我看了 proto 就是 dist/protobuf/js/parser 的 re-export ,理论上是一个东西
    yuhangch
        2
    yuhangch  
    OP
       2022-03-09 09:20:17 +08:00
    @noe132
    idea
    哦我又看了一下,IDE 给出的两个建议,都能用

    ```
    import {decodeDanmaku} from "@mr-quin/bilibili-api/dist/protobuf/js/parser"
    import { decodeDanmaku } from '@mr-quin/bilibili-api/dist/proto';
    ```

    那么问题变成 `@mr-quin/bilibili-api/dist/proto` 跟 `@mr-quin/bilibili-api/proto`是什么区别?
    为什么后者找不到

    > This is not done internally because the protobuf schema file is quite big and should only be imported when needed.

    跟这句有关吗?
    noe132
        3
    noe132  
       2022-03-09 09:41:04 +08:00 via Android
    看起来是 ide 问题。试试 vscode ?装了 ts 支持吗?
    lisongeee
        4
    lisongeee  
       2022-03-09 10:01:45 +08:00
    @yuhangch 因为 @mr-quin/bilibili-api 这个包 只有 dist 这个目录,@mr-quin/bilibili-api/proto 不存在,根据 package.json 的 main 字段,node 来判断 @mr-quin/bilibili-api 实际引入的是哪个文件,但是你用 @mr-quin/bilibili-api/dist/proto 就直接越过了 package.json ,直接去引入 @mr-quin/bilibili-api/dist/proto.js 文件了,<https://cdn.jsdelivr.net/npm/@mr-quin/[email protected]/dist/>
    yuhangch
        5
    yuhangch  
    OP
       2022-03-09 10:47:06 +08:00
    @lisongeee 明白了,看了 index.js 似乎这是个正确用法
    ```
    import {proto} from '@mr-quin/bilibili-api'
    // proto.decodeDanmaku
    ```
    那可不可以说文档里错了呢?或者作者换了打包方式没更新文档
    ```
    import { decodeDanmaku } from '@mr-quin/bilibili-api/proto'
    ```
    lisongeee
        6
    lisongeee  
       2022-03-09 13:39:42 +08:00
    @yuhangch 是的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2869 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:10 · PVG 21:10 · LAX 06:10 · JFK 09:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.