Эта статья является переводом,оригинальныйсуществуетHackers Newsсоставляет более 200 баллов.
Мой друг — известный ученый-компьютерщик, который раньше не использовал JS, и сегодня ему нужно использовать JS-библиотеку с GitHub. И моей основной работой в течение последних 6 лет были исследования юзабилити и преподавание в Массачусетском технологическом институте, так что я не совсем уверен. В конце концов, мы оба вышли с кучей багов и ничего не нашли, но он отказался от JS-библиотеки. В этой статье я постараюсь рассказать вам о различных ситуациях, с которыми он столкнулся в процессе, а также о разочаровании в его сердце.
История выглядит так... (обратите внимание, что имя библиотеки и имя человека были обработаны, чтобы избежать утечки конфиденциальной информации, некоторые ошибки я просто проигнорировал, а некоторые ошибки я помню по памяти, поэтому, пожалуйста, укажите, если я ошибаюсь)
Джон: Эй, я нашел алгоритм на GitHub. Во введении говорится, что с помощью импорта имя_функции из имени_пакета вы можете вызвать имя_функции (аргументы), чтобы использовать этот алгоритм. Это кажется очень простым. Кажется, мне нужно только установить Node, чтобы получить его сделано!
Я: Ну, Node может.
Затем Джон запустил npm install packageName --save, потому что так написано в файле README библиотеки.
Затем он запускает node index.js
Узел сообщает об ошибке:
Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension. SyntaxError: Cannot use import statement outside a module
Джон: Откуда взялся package.json...
Я: запуск npm init автоматически создаст package.json
Итак, Джон запустил npm init и выполнил шаги в командной строке, чтобы настроить его.Наконец, Джон добавил предложение типа «модуль» в package.json.
Затем он снова запустил node index.js.
Узел сообщает об ошибке:
SyntaxError: Cannot use import statement outside a module
Джон находит это странным, потому что ошибка возникает из-за внутреннего файла этой JS-библиотеки. Как это могло произойти?
Я: Давай, с этой ошибкой все в порядке, ты можешь попробовать запустить ее прямо в браузере без Node. Это должен быть модуль ES6, это алгоритм, он не использует Node API, поэтому просто используйте браузер напрямую.
Джон последовал моему совету и создал файл index.html, добавив в него строку
Однако консоль не показала ожидаемых результатов.
Я: О, я забыл сказать, вам нужно скорректировать путь. Node автоматически загрузит JS-файлы из node_modules, а Firefox этого делать не будет, нужно прописать полный путь самостоятельно.
Джон заглянул в каталог файлов и обнаружил, что там нет папки node_modules.
Я: Ну, вы только что запустили npm install, а затем создали package.json, он должен быть таким, вам нужно снова запустить npm install, чтобы увидеть каталог node_modules.
Джон снова запустил npm install packageName --save.
Джон: Вы правы, теперь есть каталог node_modules.
Джон отчаянно пролистывал каталог node_modules и наконец нашел полный путь к JS-файлу.
Затем Джон изменил путь к файлу на index.js.
Firefox сообщает об ошибке:
Incorrect MIME type: text/html
Я: О, вы не можете открыть index.html с протоколом file://. Вам нужно запустить службу HTTP локально, JS в файловом протоколе сильно ограничен.
Джон: Но зачем мне... ну, я просто запущу HTTP-сервер.
Затем Джон запускает службу HTTP, а затем использует браузер для посещения http://localhost:80.
Firefox сообщает об ошибке:
Incorrect MIME type: text/html
Джон: Что ж, следует ли добавлять MIME-типы text/javascript в файлы JS?
Я: Нет, он должен добавляться автоматически. Вы открываете сеть, я подозреваю, что это потому, что браузер не может найти файл вашей библиотеки JS, поэтому он возвращает страницу 404, а страница 404 обрабатывается как файл JS, чтобы сообщить об этой ошибке.
Мы повторно проверили каталог файлов и обнаружили, что VSCode по умолчанию объединил некоторые каталоги, из-за чего Джон прописал неправильный путь. Я думаю, что эта функция VSCode удобна, но VSCode должен давать очевидные подсказки.
Firefox сообщает об ошибке:
SyntaxError: missing ) after formal parameters
Я: Как же так, сам исходный код этого пакета неверный. Щелкнем по этому сообщению об ошибке, чтобы увидеть, какая строка сообщает об ошибке.
Джон щелкнул соответствующий файл.
Я: Боже, это не JS-файл, это TypeScript. Но суффикс этого файла — .js!
Джон: Я просто хочу протестировать алгоритм JS... 😭😭😭
В конце концов Джон сдался и сказал, что больше никогда не хочет прикасаться к модулям Node, npm и ES6.
История окончена.
Обратите внимание, что Джон занимается информатикой и много знает о сети: у него установлены Node и npm, он также знает, что такое MIME-типы, а также сам запускает HTTP-сервер. Если он новичок, на самом деле нет никакой надежды (сделать библиотеку).
Перевод завершен.
Далее я выдержу некоторые комментарии из статьи.
Маноэль Вилела сказал: «Четыре года назад я сказал, что процесс разработки JS (и самого JS) — это горячая курица, которую другие обрызгивают. Эта статья меня не удивляет, история интересная (и грустная). У молодоженов нет надежды, только боль и страдания.
Дэн ответил Маноэлю Вилеле: Не только новички.
tjholowaychuk сказал: все еще так грязно :D