Итак, я хочу написать новый школьный код Javascript, используя эти причудливые толстые стрелки, распространять классные операторы и классные классы. Добавьте щепотку контроля версий и подключите его к сети, чтобы я мог работать в любое время и в любом месте, когда приходит вдохновение.
Это не так просто, как раньше; создание html-файла и помещение кода в теги скрипта. Но тогда приложения, которые мы создаем, уже не такие простые, как раньше.
В этом руководстве показано, как настроить современный каркас рабочего процесса разработки Javascript.
Администрирование
Если у вас его еще нет, скачайте Node.
https://nodejs.org/en/download/
Node — это (более или менее) движок Javascript, вынесенный из браузера, так что JS можно написать и для сервера. Оказывается, это действительно эффективно для определенных типов приложений. Потоковая передача данных и приложения в реальном времени особенно хорошо сочетаются с неблокирующим и асинхронным способом работы Node.
Для наших целей мы будем использовать его в основном для менеджера пакетов: NPM, который, вероятно, является самой безболезненной системой добавления модулей и управления зависимостями, с которой я когда-либо сталкивался.
Если вы хотите добавить внешнюю кодовую базу, вы просто
npm install –save some-module
И в 99% случаев это просто работает.
Кто знал ? (конечно, не мальчики и девочки Java: p)
Мы собираемся использовать систему контроля версий, потому что сейчас не 19 век, и, синхронизировавшись с онлайн-репозиторием, мы сможем делиться и использовать нашу среду и проекты где угодно.
Git в значительной степени является стандартом для VCS, и хотя многие используют github (что является хорошим выбором), я решил использовать битбакет для наших облачных возможностей.
Прежде всего, создайте учетную запись Bitbucket на
затем загрузите git для окон
который поставляется с прекрасной оболочкой. В котором можно вводить такие вещи, как
ls -la
Поскольку мы находимся в разделе администратора, мы могли бы также войти в битбакет и создать новый пустой репозиторий (место для хранения версий) для нашего проекта.
Щелкните маленький синий значок + (создать новый) на домашней странице Bitbucket, затем щелкните репозиторий.
Вы получите такой экран ::
Дайте вашему репозиторию имя (я назвал свой «es6dev») и нажмите создать репозиторий.
Как только битбакет сделает свое дело, он покажет вам страницу с некоторой информацией о вашем недавно созданном репозитории.
Важным моментом здесь является ссылка, которую мы будем использовать, чтобы связать наш локальный код с кодом в облаке, и она будет выглядеть примерно так:
git clone https://[email protected]/omrisuleiman/es6dev.git
Запустите командную оболочку Windows, перейдите в каталог проектов (в этом примере я использую c:/projects), затем скопируйте и вставьте ссылку из git hub. Вы получите сообщение о копировании пустого репозитория, все хорошо, мы это знали.
Git создаст новый подкаталог в папке проектов. Cd в это, потому что пришло время начать получать наши модули, затем запустите
npm init -y
Эта команда инициализирует наш новый проект. Флаг -y сообщает диспетчеру пакетов узла, что мы согласны с использованием настроек по умолчанию.
Это займет несколько секунд (что меня испугало в первый раз, но не волнуйтесь), потом вы увидите что-то вроде этого::
Если вы заглянете в каталог, вы увидите, что NPM настроил базовый файл конфигурации для нашего проекта, который по соглашению вызывается
package.json
Этот файл является ключевым, и мы будем регулярно обращаться к нему по мере добавления модулей и задач в наш рабочий процесс.
Прямо сейчас это будет похоже на ::
{ "name": "es6dev", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "git+https://[email protected]/omrisuleiman/es6dev.git" }, "keywords": [], "author": "", "license": "ISC", "homepage": "https://bitbucket.org/omrisuleiman/es6dev#readme" }
Чтобы все было чисто, мы поместим наш исходный код в отдельный каталог, поэтому в каталоге es6dev создайте папку «src».
Вы можете сделать это из проводника Windows или с помощью git bash.
mkdir src
До сих пор все это было теоретически, так что давайте на самом деле напишем немного кода.
Откройте ваш любимый текстовый редактор, затем создайте файл с содержимым
console.log("hello world");
Сохраните его как index.js в вашем каталоге src.
Теперь пришло время проверить, все ли работает как задумано. Перейдите на уровень выше в каталог es6dev и введите
node src/index.js
И, если все пойдет по плану, вы получите это ::
Все идет нормально.
Теперь давайте подготовимся к совершенству ES6, изменив содержимое index.js на
let hello = () => {console.log("hello world");} hello();
Ячейку в контрольном списке «Администрирование» мы должны отметить, создав место, где будет жить наш код распространения, как только весь наш прекрасный исходный код ES6 будет готов в прайм-тайм. Кажется справедливым назвать это dist да?
Давайте создадим эту папку под папкой es6dev на том же уровне, что и src.
mkdir dist
Ну, я упаковал и упаковал.
Я кодирую всю ночь напролет. Саундтрек Muddy Waters не является обязательным для следующей части.
Поскольку мы больше не запускаем код напрямую с HTML-страниц, мы будем использовать процесс сборки: набор задач, которые делают наш код готовым к работе.
Одной из ключевых частей этого процесса является приложение командной строки под названием webpack. Он делает множество интересных вещей, и прямо сейчас мы собираемся использовать одну из самых популярных функций, которая берет все файлы javascript, на которых работает наш проект, и объединяет их все вместе. Это хороший способ сделать что-то, потому что мы можем разделить наш код на модули, что означает конец этих 1000-строчных громоздких скриптов, пока мы разрабатываем, но снова сшиваем их вместе для развертывания. Страницы загружаются быстрее, когда есть только один вызов ‹script› вместо сотен.
В нашем производственном HTML мы будем вызывать и использовать наш код Javascript с простым
<script src=”./bundle.js”></script>
Прежде чем двигаться дальше и устанавливать модули узла веб-пакета, стоит потратить минуту, чтобы объяснить два разных способа добавления модулей в наш проект. Один
node --save some-module-name
Это говорит узлу, что мы будем использовать этот модуль как часть нашего основного программного обеспечения, которое должно распространяться как часть рабочей среды выполнения. Что-то вроде jQuery было бы хорошо здесь. Клиентским машинам это нужно для запуска нашего приложения.
Другой режим, в котором могут быть установлены модули узлов, — это модули разработки — код, который полезен только для разработки; транспайлеры, линтеры, uglyfiers и т. д. Они не будут поставляться с нашим окончательным приложением, что сделает его компактным, подлым и превосходным. Webpack прекрасно вписывается в эту категорию, так что давайте добавим его в наш проект с помощью (из базовой папки es6dev)
npm install --save-dev webpack webpack-dev-server webpack-cli
Это может занять несколько минут, но опять же, не волнуйтесь. Все получится.
Через некоторое время вы должны увидеть что-то подобное в окне вашей оболочки ::
когда он будет завершен, в вашем каталоге появится куча новых вещей, и если вы снова откроете package.json, вы увидите, что прекрасный npm обновил ваши настройки, чтобы включить это
"devDependencies": { "webpack": "^4.39.0", "webpack-cli": "^3.3.6", "webpack-dev-server": "^3.7.2" }
мы также только что установили удобный мини-сервер для разработки, чтобы мы могли протестировать наш связанный код. Думайте об этом как о мини-WAMP или XAMPP.
Вавилон
Мы знаем, что ES6 прекрасен и все такое, но пока не каждый браузер готов к нему. Вот тут-то и появляется очень классный инструмент под названием Babel. Он чем-то похож на компилятор, поскольку он берет наш ньюскул Javascript и преобразует его в олдскульный Javascript, понятный каждому браузеру. CD в директорию es6dev, и давайте добавим Babel в наши пакеты ::
npm install --save-dev @babel/core @babel/preset-env babel-loader
Как только он закончит взбивать, вы должны увидеть что-то вроде этого ::
Время настройки
Почти там ! У нас все установлено, осталось только все настроить.
Начнем с настройки Babel. Это делается через файл с именем «.babelrc», что должно быть достаточно просто. Но Windows немного нервничает, когда вы пытаетесь создать файл, начинающийся с точки. Обходной путь для этого — использовать оболочку git bash для создания файла, набрав
touch .babelrc
Затем вы можете открыть этот файл в редакторе по вашему выбору и скопировать и вставить следующий код
{ "presets": [ "@babel/preset-env" ] }
Сохраните его, и давайте перейдем к настройке нашего сервера разработки веб-пакетов.
Создайте новый файл в своем любимом редакторе и добавьте следующие строки
module.exports = { entry: './src/index.js', module: { rules: [ { test: /\.(js)$/, exclude: /node_modules/, use: ['babel-loader'] } ] }, resolve: { extensions: ['*', '.js'] }, output: { path: __dirname + '/dist', publicPath: '/', filename: 'bundle.js' }, devServer: { contentBase: './dist' } };
Затем сохраните его как
webpack.config.js
Эта конфигурация указывает веб-пакету транспилировать каждый файл .js, который он встречает в нашем каталоге src, но игнорировать все, что является модулем узла. Он также указывает, что весь наш исходный код должен быть склеен в «bundle.js» в папке «/dist», и что при запуске сервера разработки корневой каталог будет сопоставлен с «./dist».
Последняя часть конфигурации, которую нам нужно сделать, находится в package.json, так что откройте его; вы заметите, что он немного вырос с тех пор, как мы видели его в последний раз.
Под разделом скриптов и перед тестом добавляем точку входа «старт» (Скоро станет понятно, зачем мы это сделали!)
"scripts": { "start": "webpack-dev-server --config ./webpack.config.js --mode development", "test": "echo \"Error: no test specified\" && exit 1"
Наконец-то! Время написать код :)
После всей этой работы пришло время насладиться плодами нашего труда.
Создайте файл index.html в папке dist и сделайте его примерно таким
<!DOCTYPE html> <body> <div id='testDiv'> Hey ! </div> <script src="./bundle.js"></script> </body> </html>
Главное, что он ссылается на «bundle.js», где будет собран весь наш транспилированный код.
Приготовьте бутылку шампанского, чтобы разбить сервер, потому что мы вот-вот запустимся!
Из типа каталога es6dev
npm start
Окно консоли будет мигать в течение нескольких секунд, а затем должно показать что-то похожее на это ::
Откройте браузер и перейдите к
http://localhost:8080/
И ОМГ, мы только что взялись и сделали это!
Прежде чем мы перейдем к более сложным темам в части 2, давайте скопируем все изменения, которые мы сделали, в наш онлайн-репозиторий cvs.
Дело в том, что мы хотим хранить только файлы, необходимые для воссоздания этого «релиза». Нет смысла отправлять все стандартные модули узла, и для наших текущих целей папка «dist» не имеет значения.
Мы можем указать git, какие файлы мы не хотим отправлять, указав их в файле .gitignore.
Это один из тех надоедливых файлов StartingWithAFullStop, которые Windows не любит, поэтому в оболочке git перейдите в корень проекта, затем выполните
touch .gitignore
Откройте этот файл для редактирования и отметьте некоторые файлы и каталоги как находящиеся вне репозитория.
Скопируйте и вставьте это в содержимое файла .gitignore и сохраните его.
# Don't track content of these folders node_modules/ dist/
Любые строки, начинающиеся с «#», считаются комментариями.
Мы можем проверить состояние нашего локального репозитория с помощью
git status
Итак, давайте добавим все новые вещи, над которыми мы работали, в наш локальный репозиторий с помощью
git add .
Затем зафиксируйте наши изменения с помощью
git commit -m "Version 1 release"
Флаг «-m» позволяет нам указать сообщение о коде, который мы фиксируем, это полезно, если нам когда-нибудь понадобится оглянуться на проект и вспомнить, что, черт возьми, происходит, или когда другие люди работают над проектом. Старайтесь, чтобы сообщения были короткими и милыми.
Наконец, давайте обновим наш основной онлайн-репозиторий с помощью
git push
И мы закончили на этот раз.
Настройтесь на следующей неделе, чтобы добавить модули распространения, ветвление git, преимущества ES6 и многое другое.
огромное спасибо Пауло Савольди ( https://medium.com/@paooolino ) и его замечательной статье ( https://medium.com/netscape/a-modern-javascript-project-setup-b7842955d1d3), которая вдохновил меня на написание этого