对 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 友帮忙解释下为什么?
1
noe132 2022-03-09 09:01:56 +08:00 via Android
什么 ide ,我看了 proto 就是 dist/protobuf/js/parser 的 re-export ,理论上是一个东西
|
2
yuhangch OP @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. 跟这句有关吗? |
3
noe132 2022-03-09 09:41:04 +08:00 via Android
看起来是 ide 问题。试试 vscode ?装了 ts 支持吗?
|
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/>
|
5
yuhangch OP @lisongeee 明白了,看了 index.js 似乎这是个正确用法
``` import {proto} from '@mr-quin/bilibili-api' // proto.decodeDanmaku ``` 那可不可以说文档里错了呢?或者作者换了打包方式没更新文档 ``` import { decodeDanmaku } from '@mr-quin/bilibili-api/proto' ``` |