关于 Nodejs 引入的问题

关于 Nodejs 引入的问题

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

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

import { decodeDanmaku } from '[@mr-quin](/user/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](/user/mr-quin)/bilibili-api/proto'

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

import {decodeDanmaku} from "[@mr-quin](/user/mr-quin)/bilibili-api/dist/protobuf/js/parser";

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


7 回复

什么 ide ,我看了 proto 就是 dist/protobuf/js/parser 的 re-export ,理论上是一个东西



idea
哦我又看了一下,IDE 给出的两个建议,都能用

<br>import {decodeDanmaku} from "mr-quin/bilibili-api/dist/protobuf/js/parser"<br>import { decodeDanmaku } from 'mr-quin/bilibili-api/dist/proto';<br>

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

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

跟这句有关吗?

看起来是 ide 问题。试试 vscode ?装了 ts 支持吗?

因为 /bilibili-api 这个包 只有 dist 这个目录,mr-quin/bilibili-api/proto 不存在,根据 package.json 的 main 字段,node 来判断 /bilibili-api 实际引入的是哪个文件,但是你用 /bilibili-api/dist/proto 就直接越过了 package.json ,直接去引入 /bilibili-api/dist/proto.js 文件了,<https://cdn.jsdelivr.net/npm/mr-quin/[email protected]/dist/>

明白了,看了 index.js 似乎这是个正确用法
<br>import {proto} from 'mr-quin/bilibili-api'<br>// proto.decodeDanmaku<br>
那可不可以说文档里错了呢?或者作者换了打包方式没更新文档
<br>import { decodeDanmaku } from 'mr-quin/bilibili-api/proto'<br>

是的

关于 Node.js 引入的问题,通常涉及模块(module)的导入和使用。Node.js 使用 CommonJS 模块系统,允许你通过 require() 函数导入模块,或者使用 ES6 模块语法(通过 .mjs 扩展名或在 package.json 中设置 "type": "module")。

使用 CommonJS 模块系统

这是 Node.js 默认的模块系统。假设你有一个名为 myModule.js 的文件,内容如下:

// myModule.js
function hello() {
    return 'Hello, World!';
}

module.exports = hello;

你可以在另一个文件中这样引入它:

// app.js
const hello = require('./myModule');

console.log(hello());  // 输出: Hello, World!

使用 ES6 模块系统

如果你选择使用 ES6 模块系统,文件内容需要稍作调整:

// myModule.mjs
export function hello() {
    return 'Hello, World!';
}

然后在另一个文件中这样引入:

// app.mjs
import { hello } from './myModule.mjs';

console.log(hello());  // 输出: Hello, World!

注意,使用 ES6 模块时,文件扩展名应为 .mjs,或者在 package.json 中设置 "type": "module",这样 Node.js 就会将 .js 文件作为 ES6 模块来处理。

选择哪种模块系统取决于你的项目需求和偏好。希望这能帮助你解决 Node.js 引入的问题!

回到顶部