从外部导入脚本内部的本地模块 html

Import local module inside of script from external html

我有前端和后端。从后端我得到预渲染 html (Symfony 形式),其中包括带有源标记的脚本。来源是 localhost:8001.

<html>
    <head>
        ...
    </head>
    <body>
        ...
        <div class="container">
            {% block javascripts %}
                <script type="module" src="http://localhost:8020/build/form_generator/script.js"></script>
            {% endblock %}
        </div>
    </body>
</html>

在前端 (localhost:8020) script.js 位于 Public 文件夹中。脚本加载正常,但在脚本内部我想从前端加载另一个模块(Select2,安装到 node_modules)但我无法正确加载它。 Select2 在前端的其他脚本中正确导入。 script.js:

/** @module script*/

  import 'select2'; // gives log error 1
  import select2 from "../../../node_modules/select2/dist/js/select2"; // gives log error 2

log error 1: Uncaught TypeError: Failed to resolve module specifier "select2". Relative references must start with either "/", "./", or "../".

log error 2: GET http://localhost:8020/node_modules/select2/dist/js/select2 net::ERR_ABORTED 404 (Not Found)

浏览器加载的模块不能使用Node.JS模块解析规则。

他们无权访问文件系统。他们无法搜索 node_modules 目录。

您需要:

  • 确保您要加载的模块具有 URL(如何执行此操作取决于您的 HTTP 服务器)
  • 导入 URL

例如

import select2 from '/static/js/select2.js';

或者,使用 可以 执行 Node.js 模块解析的捆绑器(例如 Webpack 或 Parcel)将所有模块捆绑到一个 JS 文件中可以作为非模块加载。