kotx / render

Cloudflare Worker to proxy and cache requests to R2
MIT License
384 stars 85 forks source link

"wrangler publish" fails, "Error: missing field `type`" #9

Closed catharsis71 closed 2 years ago

catharsis71 commented 2 years ago

I'm very new at this and having a bad time

The wrangler.toml does not have a "type" entry so "wrangler publish" fails like this:

$ wrangler r2 bucket list
Error: missing field `type`

I tried putting type = "javascript" in the file but it did not work

$ wrangler publish
✨  Basic JavaScript project found. Skipping unnecessary build!
Error: The entrypoint of your Worker (dist/index.js) could not be found.

I tried type = "typescript" but also did not work

$ wrangler publish
Error: enum TargetType does not have variant constructor typescript

I tried some other random guesses but nothing that worked

kotx commented 2 years ago

Hi @catharsis71, are you using wrangler2? Wrangler v1 doesn't work with the new wrangler.tomls.

catharsis71 commented 2 years ago

seems like I have wrangler 1.19.12

is there any way to make it work with that version or am I just out of luck?

kotx commented 2 years ago

Hmm, try setting type to javascript and running npm run prepublishOnly before publishing to compile the TypeScript to JavaScript (it should create the dist/index.js entrypoint).

catharsis71 commented 2 years ago

Well that did something but I'm not sure what

$ wrangler publish
✨  Basic JavaScript project found. Skipping unnecessary build!
Error: Something went wrong with the request to Cloudflare...
Uncaught SyntaxError: Cannot use import statement outside a module
  at line 1
 [API code: 10021]

I'll look into trying to get wrangler2 but I'm close to giving up on R2 because they make everything far too difficult

I don't suppose there's any possibility of doing this through the Cloudflare dashboard instead of using wrangler? I tried using the worker "Quick Edit" button and pasting in stuff from the index.js or index.ts but unsurprisingly it didn't work. I don't really even want to have all this NPM / etc stuff installed, I just installed it all temporarily and plan on uninstalling everything once the worker is functional (or I give up on the whole endeavor)

kotx commented 2 years ago

Yeah, I'm not entirely sure why it's not working with Wrangler v1. I don't think there's a way with the dashboard either, since it's a bit outdated TMK.

However, you can always try the GitHub Actions method, it doesn't require anything locally- you can create the R2 bucket, etc from the Cloudflare dashboard. If you decide on doing that, feel free to ask me if any issues arise.

catharsis71 commented 2 years ago

trying again now with wrangler2

$ wrangler2 publish
 ⛅️ wrangler 2.0.7
-------------------
✘ [ERROR] Could not resolve "range-parser"

    src/index.ts:1:23:
      1 │ import parseRange from "range-parser";
        ╵                        ~~~~~~~~~~~~~~

  You can mark the path "range-parser" as external to exclude it from the bundle, which will remove
  this error.

✘ [ERROR] Build failed with 1 error:

  src/index.ts:1:23: ERROR: Could not resolve "range-parser"

If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new.
catharsis71 commented 2 years ago

Now I'm trying the Github Actions method

is this the correct place for the secrets?

image

When I was running wrangler locally I just used "wrangler login" so I didn't have to mess with tokens/keys

I tried setting CF_API_TOKEN to my Global API Key but Cloudflare didn't seem to like it, I guess I actually need to create a token for this but what permissions does it need?

kotx commented 2 years ago

✘ [ERROR] Could not resolve "range-parser"

Right, I forgot, you need to run npm install before. I'll put that in the README.

is this the correct place for the secrets?

Yup!

I tried setting CF_API_TOKEN to my Global API Key but Cloudflare didn't seem to like it, I guess I actually need to create a token for this but what permissions does it need?

Just Workers Scripts:Edit. I'll put that in the README as well.

Edit: README has been updated!

catharsis71 commented 2 years ago

okay so we definitely have some level of functionality now

with a custom subdomain, seems to be working fine

using workers.dev was also working fine but I turned it off because I don't really need it

then I got to looking at "routes" stuff which I don't really understand

I thought maybe instead of being reliant on a files.(domain).com subdomain, I could rig it so that (domain).com/files/ also works

image

and it's clearly hitting the script because I'm getting your "File Not Found" message but I'm getting that even when requesting a file that does exist, also, requests to (domain).com/files/ without a file specified get "File Not Found" instead of "OK"

If I do it like this do I need to move all my files into a /files/ subdirectory in the bucket or something along those lines?

sorry to venture off-topic from what I opened this for

kotx commented 2 years ago

If I do it like this do I need to move all my files into a /files/ subdirectory in the bucket or something along those lines?

Yeah, you'd have to prefix all your files with files/. I could add functionality to have a base/prefix path to look for, if you like.

I'll also close this issue since the original problem was resolved, but if you have any other questions feel free to ask them.

catharsis71 commented 2 years ago

Thank you for all your assistance on this

yes, a base/prefix thing could potentially be useful but not really a big deal