Azure构建Next/NX应用启动报错:严格模式不允许八进制转义序列
问题现象
Azure流水线构建Next.js/NX应用成功,但启动时抛出语法错误:
SyntaxError: Octal escape sequences are not allowed in strict mode.
at Object.compileFunction (node:vm:360:18)
at wrapSafe (node:internal/modules/cjs/loader:1088:15)
at Module._compile (node:internal/modules/cjs/loader:1123:27)
at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
at Module.load (node:internal/modules/cjs/loader:1037:32)
at Module._load (node:internal/modules/cjs/loader:878:12)
at Module.require (node:internal/modules/cjs/loader:1061:19)
at require (node:internal/modules/cjs/helpers:103:18)
at Object.<anonymous> (E:\xxx\dist\apps\launchpad-app\next.config.js:2:16)
at Module._compile (node:internal/modules/cjs/loader:1159:14)
问题根源
排查发现with-nx.js文件中workspaceRoot的路径未正确转义,代码如下:
function getWithNxContext() { return { workspaceRoot: 'D:\a\1\s', libsDir: 'libs' }
其中\a和\1被识别为八进制转义序列,违反严格模式规则,正确路径应为D:\\a\\1\\s。
解决方法
方案1:通过环境变量指定转义后的路径
修改Azure Pipeline的PowerShell步骤,显式设置NX_WORKSPACE_ROOT环境变量,覆盖默认路径:
- powershell: | $env:NX_WORKSPACE_ROOT = "D:\\a\\1\\s" npm install npm ci npm run buildprod displayName: 'Build application'
方案2:在构建命令中传入转义后的路径
修改package.json中的buildprod命令,添加--workspace-root参数(注意JSON中需四层反斜杠转义):
"buildprod": "nx run app:build:production --skip-nx-cache --workspace-root=\"D:\\\\a\\\\1\\\\s\"",
方案3:切换至Linux构建代理
将Azure流水线的代理镜像改为Linux系统(如ubuntu-latest),Linux使用正斜杠作为路径分隔符,从根源避免转义问题:
pool: vmImage: 'ubuntu-latest'
方案4:配置NX工作区路径规则
在项目根目录的nx.json中添加workspaceLayout配置,确保NX生成路径时自动处理转义:
{ "workspaceLayout": { "appsDir": "apps", "libsDir": "libs" } }
附:原构建配置文件
Azure Pipeline的azure-pipelines.yml
trigger: - master pool: vmImage: 'windows-2022' steps: - task: NodeTool@0 inputs: versionSpec: '18.x' displayName: 'Install Node.js' - powershell: | npm install npm ci npm run buildprod displayName: 'Build application'
package.json中的构建命令
"buildprod": "nx run app:build:production --skip-nx-cache",
内容的提问来源于stack exchange,提问作者briancaos

