3

My HTML file:

<!DOCTYPE html>
<head>
    ...
</head>
<body>
    ...
    <script src="script.js"></script>
</body>

My JavaScript file - script.js:

import * as FilePond from 'filepond';

const myPond = FilePond.create({
    multiple: false,
    name: 'filepond'
});

document.body.appendChild(pond.element);

But error occurred, the browser said:

Uncaught SyntaxError: Cannot use import statement outside a module

So I edited the script.js into this:

const FilePon = require('filepond')

const myPond = FilePond.create({
    multiple: false,
    name: 'filepond'
});

document.body.appendChild(pond.element);

But error occurred again, the browser said:

Uncaught ReferenceError: require is not defined at script.js:1

How can I fix it?

palaѕн
  • 72,112
  • 17
  • 116
  • 136
Mr. Will
  • 83
  • 2
  • 9

3 Answers3

4

Actually, require() is for Node.js. You can't use it in browsers.

First solution:

Add the type="module" attribute to the <script> tag.
So it will be <script type="module" src="script.js"></script>

Second solution:

Just add <script src="https://cdn.jsdelivr.net/npm/filepond@4.13.6/dist/filepond.js"></script> and <link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet"> before calling script.js

I think this will work for you:

<script src="https://cdn.jsdelivr.net/npm/filepond@4.13.6/dist/filepond.js"></script>
<link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet">
<script>
const myPond = FilePond.create({
    multiple: false,
    name: 'filepond'
});

document.body.appendChild(pond.element);
</script>
Community
  • 1
  • 1
MARSHMALLOW
  • 1,315
  • 2
  • 12
  • 24
  • – Russo Dec 17 '22 at 12:34
3

require() is a NodeJS function, not a browser JS function. If the package uses npm, chances are its made for NodeJS and not browser JS.

If you want to include js files in the browser, you need to use html includes:

<script src="script.js"></script>

Or a templating solution which allows to include other files such as EJS

pacukluka
  • 728
  • 4
  • 18
2

It's simple:

  1. Just include the FilePond css & js file from CDN instead like:

    <link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet">
    <script src="https://unpkg.com/filepond/dist/filepond.js"></script>
    
  2. Next, you do not need any import or require. You can simply use the rest of the code as FilePond is globaly declared now like:

const myPond = FilePond.create({
  multiple: false,
  name: 'filepond'
});

document.body.appendChild(myPond.element);
<link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet">
<script src="https://unpkg.com/filepond/dist/filepond.js"></script>
palaѕн
  • 72,112
  • 17
  • 116
  • 136
  • All the answers made effect, but what if I'd like to use npm to install packages for my site? – Mr. Will May 13 '20 at 12:23
  • 1
    The original question was how to import the file locally. Since the file is already installed locally, using a CDN here is problematic in this context for two reasons: 1. Making a request to an external server for a file that’s already available locally is unnecessary and will only increase page load times, and 2. Doesn’t import the local file. – Zachary Beschler Apr 07 '23 at 21:22