Skip to content

feature: alias modules in the worker#6167

Merged
threepointone merged 1 commit intomainfrom
module-aliases
Jun 28, 2024
Merged

feature: alias modules in the worker#6167
threepointone merged 1 commit intomainfrom
module-aliases

Conversation

@threepointone
Copy link
Copy Markdown
Contributor

@threepointone threepointone commented Jun 28, 2024

Sometimes, users want to replace modules with other modules. This commonly happens inside a third party dependency itself. As an example, a user might have imported node-fetch, which will probably never work in workerd. You can use the alias config to replace any of these imports with a module of your choice.

Let's say you make a fetch-nolyfill.js

export default fetch; // all this does is export the standard fetch function`

You can then configure wrangler.toml like so:

[alias]
"node-fetch" = "./fetch-nolyfill"

So any calls to import fetch from 'node-fetch'; will simply use our nolyfilled version.

You can also pass aliases in the cli (for both dev and deploy). Like:

npx wrangler dev --alias node-fetch:./fetch-nolyfill

Author has addressed the following

  • Tests
    • TODO (before merge)
    • Included
    • Not necessary because:
  • E2E Tests CI Job required? (Use "e2e" label or ask maintainer to run separately)
    • I don't know
    • Required / Maybe required
    • Not required because: vibes
  • Changeset (Changeset guidelines)
    • TODO (before merge)
    • Included
    • Not necessary because:
  • Public documentation
    • TODO (before merge)
    • Cloudflare docs PR(s):
    • Not necessary because:

Sometimes, users want to replace modules with other modules. This commonly happens inside a third party dependency itself. As an example, a user might have imported `node-fetch`, which will probably never work in workerd. You can use the alias config to replace any of these imports with a module of your choice.

Let's say you make a `fetch-nolyfill.js`
```ts
export default fetch; // all this does is export the standard fetch function`
```

You can then configure `wrangler.toml` like so:
```toml
[alias]
"node-fetch": "./fetch-nolyfill"
```

So any calls to `import fetch from 'node-fetch';` will simply use our nolyfilled version.

You can also pass aliases in the cli (for both `dev` and `deploy`). Like:
```bash
npx wrangler dev --alias node-fetch:./fetch-nolyfill
```
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Jun 28, 2024

🦋 Changeset detected

Latest commit: 7799ced

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
wrangler Patch
@cloudflare/vitest-pool-workers Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@threepointone threepointone added the e2e Run wrangler + vite-plugin e2e tests on a PR label Jun 28, 2024
@threepointone threepointone marked this pull request as ready for review June 28, 2024 13:59
@threepointone threepointone requested review from a team as code owners June 28, 2024 13:59
@github-actions
Copy link
Copy Markdown
Contributor

A wrangler prerelease is available for testing. You can install this latest build in your project with:

npm install --save-dev https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/9713989200/npm-package-wrangler-6167

You can reference the automatically updated head of this PR with:

npm install --save-dev https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/prs/6167/npm-package-wrangler-6167

Or you can use npx with this latest build directly:

npx https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/9713989200/npm-package-wrangler-6167 dev path/to/script.js
Additional artifacts:
npx https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/9713989200/npm-package-create-cloudflare-6167 --no-auto-update
npm install https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/9713989200/npm-package-cloudflare-kv-asset-handler-6167
npm install https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/9713989200/npm-package-miniflare-6167
npm install https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/9713989200/npm-package-cloudflare-pages-shared-6167
npm install https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/9713989200/npm-package-cloudflare-vitest-pool-workers-6167

Note that these links will no longer work once the GitHub Actions artifact expires.


wrangler@3.62.0 includes the following runtime dependencies:

Package Constraint Resolved
miniflare workspace:* 3.20240620.0
workerd 1.20240620.1 1.20240620.1
workerd --version 1.20240620.1 2024-06-20

Please ensure constraints are pinned, and miniflare/workerd minor versions match.

@threepointone threepointone removed the e2e Run wrangler + vite-plugin e2e tests on a PR label Jun 28, 2024
Copy link
Copy Markdown
Contributor

@RamIdeas RamIdeas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎉

@irvinebroque
Copy link
Copy Markdown
Contributor

Is the reason this only works for Workers but not Pages...

  • just that Pages is a different codepath, and viable to make it work for Pages?
  • that there's something fundamental about module aliasing that doesn't (at least easily) work a pre-bundled project (i.e. I run remix vite:build and then wrangler pages deploy with aliasing enabled in my wrangler.toml)
  • something else

Similar to #6511, trying to make sure we don't add to the set of difference between Workers/Pages where we can avoid it.

And with Workers Assets — will be people doing something akin to remix vite:build && wrangler deploy, like they do with wrangler pages deploy today. So if there are tricky cases when we try to do aliasing on code that's already gone through this build/bundling step, trying to think ahead to that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

3 participants