写了个 Nodejs npm 搜索工具
写了个 Nodejs npm 搜索工具
页面放在… http://s.jiyinyiyong.info/npm-search/page/
因为用了 WebSocket, 于是别的浏览器就用不了…
另外 VPS 比较慢… 不知道国内怎么办好,
代码在 Github, 继续改: https://github.com/jiyinyiyong/npm-search
nipster 和命令行两个都太慢了… 所以折腾了, 数据是从 npmjs.org 抓的
支持正则搜索比如 live\w
会经过 new RegExp(‘live\w’)
编译成 /live\w/
不知道应该怎么排序才有用, 限制了数量在 40 左右吧
写了个 Node.js npm 搜索工具
大家好,我最近写了一个简单的 Node.js npm 搜索工具,可以方便地搜索 npm 包。你可以通过网页界面或命令行来使用它。
页面地址
页面已经部署上线,你可以访问以下链接:
技术栈
由于使用了 WebSocket,当前版本只能通过一个特定的浏览器来访问。未来可能会考虑其他方式来改善这一点。另外,由于服务器的性能问题(我的 VPS 比较慢),在国内访问可能会比较慢。如果有更好的解决方案,欢迎提 PR!
代码仓库
如果你对代码感兴趣,可以查看我的 GitHub 仓库:
数据来源
数据直接从 npm 官方网站抓取而来,以确保数据的准确性和实时性。目前有两个工具 nipster
和命令行工具速度较慢,所以我决定自己动手丰衣足食。
搜索功能
搜索功能支持正则表达式搜索。例如,输入 live\w
会被编译成正则表达式 /live\w/
进行匹配。这样你就可以灵活地搜索符合特定模式的包名了。
排序与结果限制
关于如何排序搜索结果,我还在探索中。目前我将结果限制在 40 个左右,以减少服务器压力并提高响应速度。如果你有好的建议,欢迎提 issue 或 PR!
示例代码
以下是搜索功能的简单示例代码:
const express = require('express');
const axios = require('axios');
const app = express();
app.get('/search', async (req, res) => {
const query = req.query.q; // 获取查询参数
if (!query) {
return res.status(400).send({ error: 'Query is required' });
}
try {
// 从 npm 官网获取数据
const response = await axios.get(`https://registry.npmjs.org/-/v1/search?text=${encodeURIComponent(query)}&size=40`);
const packages = response.data.objects.map(obj => obj.package);
// 返回前 40 个结果
res.json(packages.slice(0, 40));
} catch (error) {
console.error(error);
res.status(500).send({ error: 'Failed to fetch data from npm registry' });
}
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
以上代码展示了如何使用 Express 和 Axios 从 npm 官方 API 获取数据,并返回前 40 个匹配的结果。希望这个工具对你有所帮助!如果你有任何问题或建议,请随时联系我。
增加了更新时间的提示, 并把抓到的数据在本地写了一份, 更新周期 6h… http://s.jiyinyiyong.info/npm-search/page/ http://s.jiyinyiyong.info/npm-search/server/data.json
用了 ws
模块的话, NAE 是放不了了, 看来看去觉得到处的网速都不行啊
搞个阿里云…国内速度还是很好的…
国内的空间, 嫌备案麻烦. 貌似阿里云比我需要的贵好多
关于“写了个 Nodejs npm 搜索工具”的帖子内容,你可以考虑以下几点来优化和改进你的项目:
-
WebSocket 替换为 REST API: 使用 WebSocket 可能会导致一些浏览器不兼容。建议将 WebSocket 的功能替换为 REST API 调用,这将提高跨浏览器的兼容性。例如,你可以使用
axios
或node-fetch
来发起 HTTP 请求。示例代码:
const axios = require('axios'); async function searchNpm(keyword) { try { const response = await axios.get(`https://registry.npmjs.org/-/v1/search?text=${encodeURIComponent(keyword)}`); return response.data.objects.map(obj => obj.package.name); } catch (error) { console.error('Error fetching data:', error); return []; } }
-
提高性能:
- 使用缓存机制来存储频繁请求的数据,减少对远程服务的依赖。
- 如果可能,可以考虑部署到国内的服务提供商,如阿里云、腾讯云等,以提高访问速度。
-
排序算法: 根据需求选择合适的排序方法。例如,可以根据下载量、更新日期或星级进行排序。你也可以让用户自定义排序规则。
示例代码:
function sortResults(results, sortBy = 'popularity') { switch(sortBy) { case 'popularity': return results.sort((a, b) => b.downloads - a.downloads); case 'date': return results.sort((a, b) => new Date(b.time.modified) - new Date(a.time.modified)); default: return results; } }
-
用户反馈: 在 GitHub 上添加一个贡献指南和问题模板,鼓励用户提出反馈和改进意见,这有助于社区贡献和发展。
-
文档和说明: 提供详细的 README 文件,包括安装步骤、如何使用该工具以及如何贡献代码。
-
安全性: 确保从外部获取的数据被正确处理,避免潜在的安全风险,如注入攻击等。
通过上述调整,你的 Node.js NPM 搜索工具将会更加完善和易用。