如何在TypeScript/React项目中导入并使用MediaWiki JavaScript API?
问题根源与解决方案
核心问题:你安装的mediawiki包并非MediaWiki官方前端库
你通过npm install mediawiki安装的是第三方MediaWiki Bot工具包(版本0.0.11),定位是编写批量编辑的Bot脚本,而非MediaWiki站点前端内置的mw对象——官方文档提及的mw是MediaWiki站点自身在页面中注入的全局对象,不需要通过npm安装,也无法通过import mw from 'mediawiki'导入。
正确实现路径
根据你获取站点分类、分类下页面的需求,分两种场景处理:
场景1:在MediaWiki站点内部开发(如用户脚本、扩展)
直接使用全局mw对象,无需额外安装包:
// 加载MediaWiki API模块并发起请求 mw.loader.using('mediawiki.api').then(() => { const api = new mw.Api(); // 获取所有分类 api.get({ action: 'query', list: 'allcategories', aclimit: 'max' }).then(data => { console.log('所有分类:', data.query.allcategories); }); // 获取指定分类下的页面 api.get({ action: 'query', list: 'categorymembers', cmtitle: 'Category:你的分类名', cmlimit: 'max' }).then(data => { console.log('分类下的页面:', data.query.categorymembers); }); });
场景2:外部React/TS项目调用MediaWiki API
外部项目无法访问MediaWiki内置mw对象,直接通过HTTP请求调用公开API即可:
// 获取所有分类 async function getAllCategories(wikiApiUrl: string) { const response = await fetch(`${wikiApiUrl}?action=query&list=allcategories&aclimit=max&format=json`); const data = await response.json(); return data.query?.allcategories || []; } // 获取指定分类下的页面 async function getPagesInCategory(wikiApiUrl: string, categoryTitle: string) { const encodedTitle = encodeURIComponent(categoryTitle); const response = await fetch(`${wikiApiUrl}?action=query&list=categorymembers&cmtitle=${encodedTitle}&cmlimit=max&format=json`); const data = await response.json(); return data.query?.categorymembers || []; } // 使用示例 const wikiApiUrl = 'https://你的维基站点地址/w/api.php'; getAllCategories(wikiApiUrl).then(categories => console.log(categories)); getPagesInCategory(wikiApiUrl, 'Category:示例分类').then(pages => console.log(pages));
补充提示
- 当分类/页面数量超过
aclimit/cmlimit上限时,需要解析返回结果中的continue参数,循环发起请求处理分页 - 若站点需要权限验证,需在请求中携带登录后的Cookie或使用OAuth认证
内容的提问来源于stack exchange,提问作者mmachenry
相关产品推荐
相关产品推荐

