ember-cli-deploy / ember-cli-deploy/ember-cli-deploy-build

Windows: distFiles contain backslashes since glob v10, producing broken S3 keys downstream

Đang mở Phù hợp với người mới
#92 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
JavaScript
Star
23
Fork
23
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

### Summary

`ember-cli-deploy-build@3.0.0` builds `context.distFiles` with:

```js
distFiles: glob.sync('**/*', { cwd: outputPath, nodir: true, dot: true })
```

and depends on `glob@^10.2.6`. Since the glob v9 rewrite, `glob.sync` returns **platform-native path separators** (this was a breaking change from v7/v8, which always returned `/`). On Windows, `distFiles` therefore come out as `assets\app-.js` instead of `assets/app-.js`.

Downstream plugins use these strings verbatim. `ember-cli-deploy-s3` uploads objects under literal-backslash keys (`assets\app.js` — `%5C` in the URL), so every asset ends up unreachable at its expected `assets/...` URL.

### Observed impact

Deploying the same commit:

- from Linux/macOS → works, objects keyed `assets/...`
- from Windows → site is down: `index.html` (uploaded at the bucket root by `ember-cli-deploy-s3-index`, so unaffected) references `assets/...`, CloudFront finds nothing there and the SPA 404-fallback serves `index.html` in place of every script. With `ember-cli-sri` this surfaces as SRI errors where **every asset reports the same computed hash** (the hash of index.html) — quite misleading until you notice the backslash-keyed objects in the bucket.

### Root cause

glob v9+ returns `\`-separated paths on Windows unless the `posix: true` option is passed (see the "Windows" section of the glob README).

### Suggested fix

Pass `posix: true` to both `glob.sync` calls in `index.js` (lines 24 and 58):

```js
glob.sync('**/*', { cwd: outputPath, nodir: true, dot: true, posix: true })
```

This restores the pre-v9 behavior of always emitting `/`, which is what every consumer of `distFiles` expects (S3 keys, manifest entries, URLs).

### Workaround

Pin glob back to v8 for this package, e.g. with yarn resolutions:

```json
"resolutions": { "ember-cli-deploy-build/glob": "^8.1.0" }
```

### Environment

- ember-cli-deploy-build 3.0.0 (glob resolves to 10.5.0)
- ember-cli-deploy 2.0.0, ember-cli-deploy-s3 5.x, ember-cli-deploy-s3-index 4.x
- Windows (any); Linux/macOS unaffected

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Open index.js and inspect the glob.sync calls at lines 24 and 58, starting with how they populate distFiles on Windows. Update the glob options so emitted paths use forward slashes, then verify that generated distFiles and downstream S3 object keys use the expected assets/... form.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
javascript
Lĩnh vực
build-system
Loại issue
Lỗi
Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức độ hoạt động
Sôi nổi
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
85/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.