关于 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 友帮忙解释下为什么?
什么 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/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.
跟这句有关吗?
看起来是 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 引入的问题!