【问题标题】:How to include a npm package in an HTML file?如何在 HTML 文件中包含 npm 包?
【发布时间】:2020-08-28 09:31:09
【问题描述】:

我的 HTML 文件:

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

我的 JavaScript 文件 - script.js:

import * as FilePond from 'filepond';

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

document.body.appendChild(pond.element);

但是发生了错误,浏览器说:

Uncaught SyntaxError: Cannot use import statement outside a module

所以我将 script.js 编辑成这样:

const FilePon = require('filepond')

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

document.body.appendChild(pond.element);

但又出现错误,浏览器提示:

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

我该如何解决?

【问题讨论】:

  • stackoverflow.com/a/19059825/5064324 这个答案有帮助吗?
  • 您可以使用 ES6 中的 import,但您需要将 js 文件转换为浏览器支持的 javascript。你需要 babel 来编译你的 JS
  • require() 与 Node.js 一起使用
  • 尝试将&lt;script src="script.js"&gt;&lt;/script&gt;改为&lt;script type="module" src="script.js"&gt;&lt;/script&gt;

标签: javascript html node.js npm frontend


【解决方案1】:

实际上,require() 是针对 Node.js 的。您不能在浏览器中使用它。

第一个解决方案:

将type="module" 属性添加到&lt;script&gt; 标记。
所以会是&lt;script type="module" src="script.js"&gt;&lt;/script&gt;

第二种解决方案:

在调用script.js之前添加&lt;script src="https://cdn.jsdelivr.net/npm/filepond@4.13.6/dist/filepond.js"&gt;&lt;/script&gt;和&lt;link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet"&gt;

我认为这对你有用:

<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>

【讨论】:

    【解决方案2】:

    很简单:

    1. 只需包含来自 CDN 的 FilePond css & js 文件,例如:

      <link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet">
      <script src="https://unpkg.com/filepond/dist/filepond.js"></script>
      
    2. 接下来,您不需要任何导入或要求。您可以简单地使用其余代码,因为 FilePond 现在已全局声明,如下所示:

    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>

    【讨论】:

    • 所有答案都生效了,但是如果我想使用 npm 为我的站点安装包怎么办?
    【解决方案3】:

    require() 是 NodeJS 函数,而不是浏览器 JS 函数。 如果包使用 npm,则很可能是为 NodeJS 而不是浏览器 JS。

    如果要在浏览器中包含js文件,需要使用html包含:

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

    或允许包含其他文件的模板解决方案,例如 EJS

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 2019-08-25
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多