Позвоните в местный пакет JS с NodeJS / npm - PullRequest
0 голосов
/ 22 января 2019

Я использую NodeJS и установил пакет table2csv через npm

 sudo npm install table2csv

Сейчас я пытаюсь использовать этот пакет на веб-странице и не могу понять, как правильно его вызвать, вот мой пример:

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <!--/var/www/node_modules/table2csv/dist/table2csv.min.js-->
    <script src=”node_modules/table2csv/dist/table2csv.min.js”></script>

    <script>function exportCSV(){
        var csv = $("#fullDataTable").table2CSV();
        window.location.href = 'data:text/csv;charset=UTF-8,'+ encodeURIComponent(csv);
    }
    </script>

</head>
<body>
    <table id="fullDataTable">
        <thead>
            <tr>
              <th>Foo.</th>
              <th>bar.</th>
              <th>bla.</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
        </tbody>
    </table>
    <Button onclick="exportCSV()">DOWNLOAD</button>
</body>
</html>

Полный путь к пакету /var/www/node_modules/table2csv/dist/table2csv.min.js, и я попробовал варианты, такие как ../node_modules/table2csv/dist/table2csv.min.js, поскольку файл моей веб-страницы находится в /var/www/views.

(в настоящее время веб-страница отображается правильно, но при нажатии кнопки Download ничего не происходит)

Как правильно вызвать пакет?

------ ОБНОВЛЕНИЕ ------

Вместо этого я добавил ссылку cdn, но функция / кнопка по-прежнему не работает

<head>
<meta charset="utf-8">
<!--/var/www/node_modules/table2csv/dist/table2csv.min.js-->
<script src="https://cdn.jsdelivr.net/npm/table2csv@1.1.3/src/table2csv.min.js"></script>

<script>function exportCSV(){
    var csv = $("#fullDataTable").table2CSV();
    window.location.href = 'data:text/csv;charset=UTF-8,'+ encodeURIComponent(csv);
}
</script>
</head>

---- ОБНОВЛЕНИЕ 2 ----

Всегда импортируйте JQuery до , используя table2csv!

(проблема по-прежнему не устранена, поскольку библиотека не загружается

---- ОБНОВЛЕНИЕ 3 -----

При использовании ссылки cdn консоль выдала мне следующие ошибки

Uncaught SyntaxError: Unexpected token < table2csv.min.js:1 на <!doctype html>, что кажется странным, а также

Uncaught TypeError: document.getElementById(...).table2csv is not a function
at exportCSV (about:11)
at HTMLButtonElement.onclick (about:34)

в строке 11: var csv = document.getElementById('fullDataTable').table2csv();

---- ОБНОВЛЕНИЕ 4 ----

Я сдался и просто скопировал содержимое table2csv.js в блок <script> в моем html. Аллилуйя.

1 Ответ

0 голосов
/ 22 января 2019

При работе с npm вы попали в мир module (в отличие от мира статических скриптов, к которому вы, вероятно, привыкли). Следовательно, папка, в которой находятся установленные пакеты, называется node-modules.

Модули, как правило, не влияют на глобальное пространство имен, что означает, что они не делают ничего доступного для глобального вызова, например, встроенный слушатель событий типа onclick="".

Вы не можете напрямую ссылаться на какие-либо node_modules пакеты из вашего HTML, это было бы огромной проблемой безопасности, так как обычно node_modules не находится внутри вашего webroot, и разрешение доступа к файлам и папкам за пределами вашего webroot было бы крайне небезопасным.

У вас есть три варианта:

  1. Окунитесь в мир модулей и комплектов модулей, таких как webpack . Это, вероятно, займет 3 месяца, чтобы понять и использовать, зная и понимая, что вы делаете. Если вы планируете заняться тяжелой Javascript-разработкой, вы не сможете обойти это.

  2. Скопируйте /var/www/node_modules/table2csv/dist/table2csv.min.js в папку вашего проекта и включите ее так же, как ваши собственные Javascripts. Недостатком является то, что вам придется делать это каждый раз при обновлении пакета.

  3. Найдите CDN (сеть доставки контента), в которой находится нужный вам файл, и оттуда на него сделайте ссылку.

    <script src="https://cdn.jsdelivr.net/npm/table2csv@1.1.3/dist/table2csv.min.js" integrity="sha256-O3PXZsVrc25oRq6k38cesC5NsdZOD/tMdjQXEWdaaZU=" crossorigin="anonymous"></script>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...