Использование моего собственного Node-модуля в браузере с Browserify - PullRequest
0 голосов
/ 03 сентября 2018

Итак, у меня есть Node-сервер - часть этого сервера представляет собой набор файлов, которые выполняют разбор объекта в форму, необходимую для другой библиотеки.

В этом наборе файлов нет ничего особенного - никаких зависимостей, просто JS, - кроме ES6 и большого количества module.exports.

Я хотел бы иметь возможность использовать этот скрипт синтаксического анализатора в браузере - мне не нужно беспокоиться ни о чем, кроме как вставить в него строку в качестве входных данных и получить обратно проанализированный объект.

Казалось, что я смогу использовать Browserify, чтобы преобразовать мой скрипт синтаксического анализа во что-то, что будет работать в браузере. Однако я прочитал всю их документацию и не могу заставить ее работать.

Допустим, я обернул библиотеку парсера следующим скриптом:

const parse = require('./parser);

module.exports = function (s) {
    return parse(s);
}

Я бегу browserify main.js > bundle.js.

Судя по их документации, я должен иметь возможность добавить следующий тег в мой HTML:

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

И тогда я ожидаю, что смогу сделать что-то вроде следующего в сценарии на этой странице:

const result = bundle(s); чтобы получить результат анализа строки через мой пакет. Это то, что документация демонстрирует.

Это, однако, просто дает ReferenceError: bundle is not defined. Просматривая очень расплывчатую информацию в Интернете, я также попытался объявить именованную функцию для экспорта в main.js, затем попытаться выполнить name(s) или bundle.name(s); и попытался также выполнить window.name = name в main.js. Та же проблема.

Что я здесь неправильно понимаю или делаю неправильно?

1 Ответ

0 голосов
/ 03 сентября 2018

Решение заключается в следующем: main.js:

const parse = require('./parser');

function process(string) {
    return parse(string);
}

window.process = process;

Затем запустите browserify main.js -o bundle.js.

После чего в index.html я могу сделать:

<script src="bundle.js"></script>
<script>
    window.onload = function() {
        const result = process("my query string");
        // do what you want
    }
</script>
...