next.js 由于lint阶段中的glob模式为负,因此忽略了显式指定的文件

jvlzgdj9  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(158)

当尝试使用nextauth提交nextjs时,由于此错误,lint stage失败,

Explicitly specified file was ignored due to negative glob patterns: "c:/projects/project01/app/api/auth/[...nextauth]/route.ts".

字符串
package.json中的lint stage配置,

"lint-staged": {
    "**/*": "prettier --write --ignore-unknown"
  }
}


这个错误是由于nextjs捕捉所有路由文件夹名称与括号?

isr3a4wc

isr3a4wc1#

我有一个相同的案例
据我所知,你必须使用Windows以外的终端来解决这个问题
请阅读prettier-isue

# Steps to Reproduce the Issue with Prettier

字符串
本文档解释了到目前为止您所采取的步骤,以尝试重现Prettier在处理具有特殊名称的文件时遇到的问题。

第一步:创建测试项目

1.使用npx create-next-app@latest创建Next.js项目。
1.选择配置选项,如TypeScript、Tailwind CSS和ESLint。

√ Would you like to use TypeScript? ... No / Yes
√ Would you like to use ESLint? ... No / Yes
√ Would you like to use Tailwind CSS? ... No / Yes
√ Would you like to use `src/` directory? ... No / Yes
√ Would you like to use App Router? (recommended) ... No / Yes
√ Would you like to customize the default import alias? ... No / Yes
√ What import alias would you like configured? ... @/*

第二步:安装Prettier

1.安装Prettier作为开发依赖项:

npm install -D prettier

第三步:创建测试文件

1.创建文件.src/pages/api/auth/[...nextauth].ts
1.将简单的TypeScript代码添加到测试文件中。

第四步:尝试跑得更漂亮

1.尝试使用命令npx prettier --write "./src/pages/api/auth/[...nextauth].ts"在测试文件上运行Prettier。
1.接收错误:[error] Explicitly specified file was ignored due to negative glob patterns: "./src/pages/api/auth/[...nextauth].ts".

第五步:尝试转义特殊字符

1.尝试使用不同的方法转义文件名[...nextauth].ts中的特殊字符,包括PowerShell中的插入符号(“^","`",””)字符。
1.在Windows下没有成功解决此问题的转义方法。

第六步:使用Zsh终端测试

1.使用Zsh终端运行相同的命令:npx prettier --write ./src/pages/api/auth/\[...nextauth\].ts
1.在转义方括号后,命令在Zsh中成功工作。

第七步:自定义命令测试

1.向package.json文件添加自定义命令:"format:fix": "prettier --write --ignore-path .gitignore ."

  1. npm run format:fix命令成功格式化所有目标文件,包括[...nextauth].ts

第八步:总结

不幸的是,即使在多次尝试转义[...nextauth].ts文件名中的特殊字符后,该问题在Windows下仍然存在。由于负glob模式,Prettier继续拒绝该文件。

我的设置

生成:

npx envinfo --system --binaries --npmPackages --markdown "next,react,prettier,typescript"

系统:

  • 操作系统:Windows 10
  • CPU:(16)x64 AMD锐龙7 5800 X 8核处理器
  • 内存:8.16 GB / 31.93 GB

二进制文件:

  • 节点:18.15.0 - C:\Program Files\nodejs\node.EXE
  • Yarn:1.22.19 - C:\Program Files\nodejs\yarn.CMD
  • npm:9.8.1 - C:\Program Files\nodejs\npm.CMD
  • pnpm:8.6.12 - C:\Program Files\nodejs\pnpm.CMD

npmPackages:

  • @types/node:20.6.2 => 20.6.2
  • @types/react:18.2.21 => 18.2.21
  • @types/react-dom:18.2.7 => 18.2.7
  • autoprefixer:10.4.15 => 10.4.15
  • eslint:8.49.0 => 8.49.0
  • eslint-config-next:13.4.19 => 13.4.19
  • 下一页:13.4.19 => 13.4.19
  • postcss:8.4.29 => 8.4.29
  • 更漂亮:^3.0.3 => 3.0.3
  • React:18.2.0 => 18.2.0
  • react-dom:18.2.0 => 18.2.0
  • 尾风css:3.3.3 => 3.3.3
  • typescript:5.2.2 => 5.2.2

其他信息

(does无法在Windows上使用这些终端)

  • PowerShell:版本7.3.6
  • cmd
  • Git Bash

它工作了

  • Ubuntu WSL(Zsh终端)。
p1iqtdky

p1iqtdky2#

有了这个lint-stage配置问题解决了。

const isWin = process.platform === "win32"

module.exports = {
  "**/*.{js,jsx,ts,tsx,json}": (filenames) => {
    const escapedFileNames = filenames
      // this will wrap all "[" "]" square brackets with another square brackets ([ => [[]) so [...customer].tsx will be processed to [[]...customer[]].tsx
      .map(
        (filename) =>
          `"${isWin ? filename.replace(/\[|\]/g, "[$&]") : escape([filename])}"`
      )
      .join(" ")
    return [`prettier --write --ignore-unknown ${escapedFileNames}`]
  },
  "**/*.{json,md,mdx,css,html,yml,yaml,scss}": (filenames) => {
    const escapedFileNames = filenames
      .map(
        (filename) =>
          `"${isWin ? filename.replace(/\[|\]/g, "[$&]") : escape([filename])}"`
      )
      .join(" ")
    return [`prettier --write --ignore-unknown ${escapedFileNames}`]
  },
}```

字符串

相关问题