'How to import via a URL using ES modules?

I want to import a library like axios directly from a URL and use it.

I don't want to add it as a script which adds axios to the window object (as shown below).

index.html
<body>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script src="./app.js" type="module"></script>
</body>
app.js
console.log(window.axios !== undefined); // true
const { data } = await axios.get(
  "https://jsonplaceholder.typicode.com/users/1"
);
console.log(data.username); // Bret

I want something like this wherein I can import axios directly from a URL.

index.html
<body>
    <script src="./app.js" type="module"></script>
</body>
app.js
import axios from "https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js";

console.log(window.axios !== undefined);
const { data } = await axios.get(
  "https://jsonplaceholder.typicode.com/users/1"
);
console.log(data.username);

Obviously this doesn't work because the JavaScript code delivered by the above CDN is not meant to be used with ES modules. Is there a workaround?



Solution 1:[1]

You can use Skypack:

import axios from 'https://cdn.skypack.dev/axios';

const { data } = await axios.get(
  "https://jsonplaceholder.typicode.com/users/1"
);
console.log(data.username);

Remove the jsDelivr CDN link.

Solution 2:[2]

JS file provided by CDN(like yours: https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js) will not provide an ES6 module export. Download and search "export default", nothing will be found.

If you use npm, you can add axios to your dependencies and use axios by import axios from 'axios'

If you still want to use ES module with CDN, This article may help.

Solution 3:[3]

You don't need to import axios in app.js because it has already been imported in your html, just remove the import and everything gonna work

    async function fetchData() {
      const { data } = await axios.get(
        "https://jsonplaceholder.typicode.com/users/1"
      );
      console.log(data);
    }

fetchData();

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Shivam
Solution 2 KaMui
Solution 3 Shivam