1

我正在使用 Sanity (sanity.io headless CMS) 并使用 CLI 进行一些数据迁移。

我如何(或者,是否有可能)如何附加 vscode 调试器并在迁移脚本中的断点处停止。我正在运行以下 cli 迁移脚本:sanity exec migrate.js --with-user-token. 我想在 migrate.js 中的断点处停止?

我已经管理了使用 node 运行的调试控制台应用程序,但不知道在使用sanity exec ... 单步执行代码是查找错误和学习的好方法。

4

2 回答 2

3

有多种不同的方法可以调试 Sanity CLI。不过,我之前没有尝试过你的方法。

如果您愿意,您可以克隆操作系统存储库。这可能会让你的事情变得更容易。如果您使用的是 VS Code,那么您可以使用此启动配置来运行带有调试器的 CLI:

{
    "type": "node",
    "request": "launch",
    "name": "Launch CLI",
    "program": "${workspaceFolder}/packages/@sanity/cli/bin/entry.js",
    "args": [
        "exec",
        "migrate.js",
        "--with-user-token"
    ]
}

您必须先运行npm run build才能生成entry.js文件。

编辑:如果要运行需要 Studio 上下文的命令,可以运行symlinkDependencies.js脚本。这方面的一个例子可以是:

node symlinkDependencies.js "/<path>/<to>/<your>/<studio>/<folder>" --all

这将在您的 Studio 实例和 Sanity monorepo 之间创建符号链接。您还必须npm run watch在 monorepo 中运行。这样您就可以在 monorepo 中编辑代码,并且您运行的命令将包含您的更改。


您可以尝试的另一件事是添加环境变量DEBUG=*。这将在运行 CLI 命令时输出调试信息。如果你在 Mac 上,你可以简单地运行DEBUG=* sanity exec migrate.js --with-user-token. 如果您使用的是 Windows,请打开 PowerShell 并运行以下命令:$env:DEBUG=*. 这仅为此 PowerShell 会话设置环境变量。然后,您可以运行您的命令。

对于您的确切问题,我想您可以尝试使用以下配置:

{
    "type": "node",
    "request": "launch",
    "name": "Launch CLI",
    "program": "/usr/local/lib/node_modules/@sanity/cli/bin/entry.js",
    "args": [
        "exec",
        "migrate.js",
        "--with-user-token"
    ]
}

或类似的东西。我自己没有尝试过这种方法。

于 2020-05-07T12:11:30.403 回答
1

我最终没有成功调试sanity exec命令,但在重新编写脚本后,我通过正常的节点调试完成了大部分相同的工作。

  • import-ed client from '@sanity/client'
  • 为我希望写入或读取草稿的项目制作了访问令牌。
  • 添加了适当的启动配置,并且,
  • 从 vscode 运行节点 v14.2.0 普通调试器,并使用断点逐步执行我的脚本。
于 2020-06-08T17:33:14.750 回答