JS расстраивает новичка в 2020 году

Node.js

Эта статья является переводом,оригинальныйсуществует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