Как я могу импортировать модули npm в es6 без веб-пакета? - PullRequest
1 голос
/ 17 октября 2019

Как я могу импортировать модуль npm (например, jquery) без веб-пакета ??

import * as $ from '../node_modules/jquery/dist/jquery.js';

он дает мне $ не определено

ВОПРОС ОБНОВЛЕН *

этот html:

<html>

<body>
  <p>hola</p>
  <script src="js/test.js" type="module"></script>
</body>

</html>

и этот js:

import * as $ from '../node_modules/jquery/dist/jquery.js';
console.log($());

дает мне в консоли

Ошибка типа: $ не является функцией

, но если я запишу в консоли, после этого сообщения появятся:

console.log ($ ());он работает как положено

$ () {}: Объект {jquery: "3.4.1", конструктор: jQuery (), длина: 0,…}

Я неиспользуя любые упаковщики, используя в браузере

1 Ответ

0 голосов
/ 18 октября 2019

Если импортируемый вами файл jquery.js не содержит export, вы не можете использовать import для его импорта. (Вы можете использовать import для его загрузки, хотя это может быть не очень хорошей идеей, подробнее ниже.) Встроенный браузер поддерживает только импорт из файлов, написанных как модули.

import * as $ from '../node_modules/jquery/dist/jquery.js';
console.log($());

дает мне в консоли

TypeError: $ is not a function

Причина в том, что когда вы используете * as $ в своем import, вы импортируете объект пространства имён модуля для модуля. Объект пространства имен модуля никогда не вызывается, это объект со свойствами для экспорта модуля. Вы можете использовать синтаксис * as x для импорта любого скрипта, даже того, который не написан как модуль и поэтому нигде не имеет export, но все, что вы получаете, это пустой объект, потому что скрипт не написан какМодуль не имеет экспорта.

, но если я пишу в консоли после появления этого сообщения:

console.log($());

, он работает как положено

Это потому, что jQuery создает глобальный $, используя глобальный window. Единственная причина, по которой вы не можете использовать этот глобальный $ в своем модуле, заключается в том, что вы затеняли , используя $ в качестве идентификатора объекта пространства имен модуля.

Thisвероятно будет работать:

import '../node_modules/jquery/dist/jquery.js';

... потому что это загрузит и запустит скрипт jQuery, который создает глобальный. Поскольку это не объявляет локальный идентификатор модуля с именем $, если вы используете $ в своем модуле, он использует global $, который создает jQuery.

Но я опасаюсь использовать import для загрузки скриптов, которые не предназначены для использования в качестве модулей. Вместо этого я думаю, что я просто включил бы jQuery с использованием тега script, а затем раздвинул бы ваш модуль отдельно, используя глобальный $.

<script src="node_modules/jquery/dist/jquery.js"></script>
<script src="js/test.js" type="module"></script>

(или нашел бы версию jQuery в модульном виде;Я не знаю ни одного, но, вероятно, существует.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...