HACKER Q&A
📣 EGreg

How do we include JavaScript scripts in a browser these days?


I see all over the Web docs that show you can import scripts like this:

  import { readContract } from '@wagmi/core'
  import { USDTAbi } from '../abi/USDTAbi'
For example you see it here: https://docs.walletconnect.com/web3modal/javascript/about

But it's not clear at all to me how to actually set up the files and have them be updated.

It seems like this is for npm or yarn to pull from a remote repository maintained by @wagmi for instance. But then what? Do I just symlink to the node_modules directory somehow? Use browserify? Or these days I'd use webpack or whatever the cool kids are using these days?

I totally get how node package management works ... for NODE. But all these client-side JS projects these days have docs that are clearly for the client-side but the ES2015 module examples they show seem to leave out all instructions for how to actually get the files there, as if it's obvious.

What gives? And finally, what exactly does "browserify" do these days, since I think Node supports both ES modules and and CJS modules? I also see sometimes UMD universal modules

In short, I'm a bit confused how to use package management properly with browsers in 2024: https://modern-web.dev/guides/going-buildless/es-modules/

And finally, if you answer this, can you spare a word about typescript? Do we still need to use Babel and Webpack together to transpile it to JS, and minify and tree-shake, or what?


  👤 8chanAnon Accepted Answer ✓
A simple search on "javascript import export" will yield much information on this topic. You can only import what has been explicitly exported. I don't know of any projects that are handled this way. Normally, you would just use the script tag in html. As for Node, I have only used "require" to import the standard modules but an npm package should import the same way.

>seem to leave out all instructions for how to actually get the files there, as if it's obvious.

I see this all the time and it's frustrating. I can't even begin to count the number of hours lost hunting down little snippets of information simply because some people think it's too "obvious" to mention. This is usually because people are pretenders. They don't actually know what they are doing because they are simply repeating what they saw on the Internet somewhere. You just have to laugh (to keep your sanity). My favourite example is people explaining how to make an SSL certificate. It's so simple, you just type this OpenSSL command. How do you get this "OpenSSL" they speak of? I've tried using OpenSSL and it's a bitch. It's bad enough that I've rolled my own code to make certs just so I don't have to use OpenSSL because I can't remember how I managed to use it the last time. Just have to laugh.

>And finally, if you answer this, can you spare a word about typescript?

Brother, you are asking a lot of questions that I can't answer but hopefully someone else will. I have to ask: why do want to use typescript? Did somebody tell you that it's better than javascript? For what, exactly?

P.S. Looking forward to further discussion on this.


👤 joshxyz
it says in their docs that they recommend Vite https://vitejs.dev/

it goes like this.

1. you create a repo folder, you cd into it.

2. you create a client template using vite which can be plain typescript, or uses frameworks such as react or vue, at https://vitejs.dev/guide/

3. you cd in that client directory, you npm install, then you npm run dev, it should show you that it works at localhost:5173

4. you follow the instructions on your url, you do npm install @web3modal/wagmi @wagmi/core @wagmi/connectors viem

5. you follow the further instructions.

> It seems like this is for npm or yarn to pull from a remote repository maintained by @wagmi for instance. But then what?

you install the wagmi modules, then you import them in your js code, those code can run upon being loaded or upon user actions such as button clicks

> Do I just symlink to the node_modules directory somehow? Use browserify? Or these days I'd use webpack or whatever the cool kids are using these days?

no need for those. browserify is old school way of transpiling commonjs modules into browser-compatible modules. webpack is similar. vite replaces both webpack and browserify. vite also uses esbuild and swc under the hood which replaces babel.

> I totally get how node package management works ... for NODE. But all these client-side JS projects these days have docs that are clearly for the client-side but the ES2015 module examples they show seem to leave out all instructions for how to actually get the files there, as if it's obvious.

pretty much similar actually. except on client-side, you have src and dist folders. when you run "npm run build" vite will compile the src dir into dist dir. the outputs are the static files that you can serve with any http server such as npx serve, or caddy, or anything really.

> What gives? And finally, what exactly does "browserify" do these days, since I think Node supports both ES modules and and CJS modules? I also see sometimes UMD universal modules

vite supports both ecmascript modules and commonjs modules. but these days you'll just want to stick with ecmascript which makes your code consistently use import and export syntax, and you get the extra benefit of it working well with your vscode intellisense.

> In short, I'm a bit confused how to use package management properly with browsers in 2024: https://modern-web.dev/guides/going-buildless/es-modules/

if people want plain js there is unpkg.com and esm.sh way, but the vite route is the best for you as it's recommended and tested by the providers of your modules.

> And finally, if you answer this, can you spare a word about typescript? Do we still need to use Babel and Webpack together to transpile it to JS, and minify and tree-shake, or what?

I recommend typescript, as it gives you better type-safety and better intellisense, but it really depends. If you're new to it, it can slow you down at first. But as your project grows you'll eventually see the value of it. In vite there are options to scaffold your project in pure js or ts.