Comments (9)
Actually I'm using the "module" type, here is a small shot of my code.
// eslint-disable-next-line import/no-unresolved
import { verifyIdToken } from 'web-auth-library/google';
import { v4 as uuidv4 } from 'uuid';
import { parseToken } from './helpers';
export default {
/**
*
* @param {import("@cloudflare/workers-types/experimental").Request} request
* @param {object} env
* @param {import("@cloudflare/workers-types/experimental").ExecutionContext} _ctx
* @returns {Promise<Response>}
*/
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async fetch(request, env, _ctx) {
// Only accept a PUT request
if (request.method !== 'PUT') {
return new Response('{"error": "Bad request!"}');
}
let envCheck;
if (!((envCheck = 'GOOGLE_CLOUD_CREDENTIALS') in env)) throw new Error(`Missing ${envCheck} environment variable`);
if (!((envCheck = 'AUTH_KEY_SECRET') in env)) throw new Error(`Missing ${envCheck} environment variable`);
if (!((envCheck = 'R2_BUCKET') in env)) throw new Error(`Missing ${envCheck} environment variable`);
try {
const idToken = parseToken(request);
...
BTW. I decided to give up with cloudflare server-less for the moment and will implement the traditional micro-services architecture with nodejs. I spent 3-4 days to make the following stack work together:
- Cloudflare Worker
- ES6
- uuid
- Firebase Auth
- Cloudflare R2
- Jest Unittests
- GraphQL client
and I failed. I've tried both, wrangler dev
and miniflare
, each of them has its own issue...
There is so much workarounds and hacks need to be done to make it works.
With micro-services I can make it work in one day.
Thank you for your help anyway.
from miniflare.
Any news on this? I'm facing the same issue as @Kostanos:
- using the module syntax
- passing the
-m
flag tominiflare
- using the
NODE_OPTIONS=--experimental-vm-modules
as documented here https://miniflare.dev/core/modules#enabling-modules
And I'm also getting FetchError [ERR_NO_HANDLER]: No fetch handler defined and no upstream to proxy to specified.
from miniflare.
Hello! 👋 I think the issue here is the rm -rf ./dist
in your build script. When Miniflare detects a change in your build watch path, it will trigger a rebuild but won't reload the worker. The worker is only reloaded when your script changes (Miniflare assumes this means the build has completed). However, in your case, you're removing the dist
directory, so Miniflare thinks the build is done and tries to load an empty script with no fetch handler.
You should be able to fix this by removing the rm
, since Rollup overwrites output files. This is definitely a bug though, Miniflare knows when the build actually finishes, so it should reload the worker then instead.
from miniflare.
Just released version 1.4.0
with this fix. Please let me know if you have any other issues or feedback. 😄
from miniflare.
Hmm, I'm still running into this issue on Windows with 1.4.1 (but not macos, where it works as expected). I run webpack and miniflare together with concurrently
, the two processes look like this:
{
"server-webpack": "webpack -w --config webpack.server.config.js",
"server-miniflare": "miniflare --kv=STORE --watch --debug server/devdist/worker.js"
}
After any code change, all requests throw FetchError: no fetch handler responded
I don't thiink I'm removing devdist at any point, unless webpack does that by default somehow.
Ideally, I would prefer miniflare not to handle the build part and instead just watch the output, because it's faster DX to run webpack watch separately than to have miniflare reinvoke a webpack build from scratch each time (due to the startup overhead).
I think the problem might be that it reloads worker.js when webpack starts writing to it, instead of when it finishes? The log looks like this:
[server-webpack] webpack 5.56.0 compiled successfully in 95 ms
[server-miniflare] [mf:dbg] server\devdist\worker.js changed, reloading...
[server-miniflare] [mf:dbg] Reloading server\devdist\worker.js...
[server-miniflare] [mf:inf] Worker reloaded! (0B)
[server-webpack] asset worker.js 1.73 MiB [emitted] (name: worker) 1 related asset
from miniflare.
I've put in a pull request to fix this (at least for my particular scenario, hopefully also others) by using chokidar's awaitWriteFinish option to check that the file isn't actively in the process of being altered before reloading it.
from miniflare.
Hey, the issue seems to be very old, but I'm having the same problem.
Trying to make miniflare to work with ES6 module and no luck yet.
Tried with both, webpack and esbuild.
Any idea?
PS. removing build instructions and running with wrangler dev
works as expected.
from miniflare.
Hey @Kostanos! It looks like you've got the -m
flag enabled which expects a modules format (export default { fetch() { ... } }
) Worker. I'm guessing you're using a service worker format (addEventListener("fetch", ...)
) Worker instead. Try removing -m
from your Miniflare command. 👍
from miniflare.
Hello - I'm struggling with the same issue when running npm run dev
, which in my case is: miniflare --watch --debug --modules
I'm using wrangler 3.0.0 and am trying to make the module syntax work.
The NODE_OPTIONS=--experimental-vm-modules
should only apply to API usage, e.g. not if you use miniflare as a CLI.
When I use wrangler dev --local
, I run into the issue described here: cloudflare/workers-sdk#3262 - not sure whether they are related?
I would say we should reopen this thread.
from miniflare.
Related Issues (20)
- Node 21 vitest-environment-miniflare compatibility HOT 1
- [Miniflare 3] Step debugging with multiple workers HOT 2
- Update undici dependency due to vulnerability HOT 1
- [Docs] Miniflare v2 docs removed? HOT 3
- How to migrate Jest unit tests to Miniflare V3? HOT 1
- Support for typescript. HOT 1
- Is is it possible to collect coverage with vitest-environment-miniflare? HOT 2
- Increase better-sqlite3 compatibility HOT 1
- Uncaught error when initializing two top level WASM modules
- Multiple nodejs_compat packages missing (`crypto`, `path`, etc) HOT 4
- Fix CVE-2024-24758 HOT 3
- Type confusion HOT 1
- @miniflare/shared should not depend on @types/better-sqlite3 HOT 1
- Vitest bug: "Error: ENOENT: no such file or directory" HOT 2
- Workers: Error when an undefined value is exported in dev environment
- Type incompatibility issue between miniflare and workers-types HOT 4
- BUG: cannot install this library in node 22, please update better-sqlite3 HOT 1
- MiniflareCoreError [ERR_RUNTIME_FAILURE]: The Workers runtime failed to start. HOT 7
- How to test with `nodejs_compat` workers?
- How to use Worker's new native RPC feature? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from miniflare.