如何在Docusaurus构建过程中排除指定文件夹?
解决Docusaurus中开发文件夹不被Build包含且禁止URL访问的问题
你遇到的问题是侧边栏隐藏只是移除了导航入口,但文件夹内容仍会被Docusaurus编译到build产物里,所以能通过直接URL访问。要彻底解决需要从阻止编译和禁止访问两个层面处理:
1. 阻止Build时包含目标文件夹
修改项目根目录的docusaurus.config.js,在@docusaurus/preset-classic的docs配置中添加exclude规则,匹配你的开发文件夹路径。假设你的开发文件夹名为dev-docs,配置如下:
module.exports = { // ...其他配置 presets: [ [ '@docusaurus/preset-classic', { docs: { // 添加exclude规则,匹配目标文件夹下所有内容 exclude: ['**/dev-docs/**'], // ...其他docs配置项 }, }, ], ], };
执行docusaurus build时,该文件夹下的所有文件都会被排除,不会出现在最终的build目录中。
2. 开发环境下禁止访问目标路径
如果在开发模式(npm start)下也不想让用户通过URL访问该文件夹,可以通过自定义Webpack配置拦截请求:
在docusaurus.config.js中添加自定义插件:
module.exports = { // ...其他配置 plugins: [ () => ({ configureWebpack(config) { return { devServer: { before(app) { // 拦截所有指向dev-docs的请求,返回404 app.get('/docs/dev-docs/*', (req, res) => { res.status(404).send('Not Found'); }); }, }, }; }, }), ], };
更简单的替代方案
如果不需要把开发文件夹放在docs目录下,直接将它移到项目根目录(比如命名为dev-files),Docusaurus默认只会处理docs、blog等约定目录,这样该文件夹既不会被编译,也无法通过URL访问。
你的项目依赖参考
"dependencies": { "@docusaurus/core": "2.0.0-alpha.66", "@docusaurus/preset-classic": "2.0.0-alpha.66", "react": "^16.8.4", "react-dom": "^16.8.4", "swagger-ui-react": "^3.49.0" }, "scripts": { "start": "docusaurus start", "build": "docusaurus build", }, "resolutions": { "babel-plugin-dynamic-import-node": "2.3.3" },
内容的提问来源于stack exchange,提问作者jolly
相关产品推荐
相关产品推荐

