You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统下Contentlayer构建路径协议报错的解决方法问询

解决Windows环境下Contentlayer + Next.js构建时的路径协议错误

问题重现

基于Next.js搭建、使用contentlayer.config.ts配置的项目,在Linux开发并部署到Vercel正常,切换到Windows环境执行build命令时触发以下错误:

error: Error: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'

已尝试将页面绝对路径改为相对路径、检查导入拼写、更新Node.js和Contentlayer,问题仍未解决。

问题根源

Windows系统的本地绝对路径(如C:\xxx\yyy)不符合Node.js ESM loader的路径规范,ESM要求本地文件路径必须以file://协议开头,而直接使用盘符开头的路径会被识别为未知协议c:,导致报错。

解决方案

修改contentlayer.config.ts中的路径配置,用Node.js内置模块将路径转换为ESM兼容格式:

  1. 引入必要的Node.js模块
import { fileURLToPath, pathToFileURL } from 'url';
import { dirname, join } from 'path';
import { defineDocumentType, makeSource } from 'contentlayer/source-files';
  1. 获取当前配置文件的目录路径(适配ESM模块规范)
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
  1. 替换所有硬编码的绝对路径
    将配置中类似contentDirPath: 'C:/your-project/content'的硬编码绝对路径,改为用join拼接相对路径:
const Post = defineDocumentType(() => ({
  // ... 其他配置
}));

export default makeSource({
  contentDirPath: join(__dirname, 'content'), // 用__dirname拼接相对路径,自动适配Windows/Linux
  documentTypes: [Post],
});

如果必须使用绝对路径,也可以将其转换为file://协议格式:

contentDirPath: pathToFileURL('C:/your-project/content').href
  1. 检查其他路径相关配置
    确保项目中所有涉及文件路径的配置(如tsconfig.json的paths映射、Next.js的next.config.js路径配置)都避免使用盘符开头的绝对路径,优先使用相对路径或动态拼接的路径。

验证方法

修改完成后,先单独执行npx contentlayer build测试Contentlayer的构建是否正常,再执行npm run build验证Next.js构建流程。

内容的提问来源于stack exchange,提问作者Oliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:46:03