Поскольку текущий блог создан с использованием WordPress, мне приходится часто изменять код, но модифицировать сторонний исходный код очень больно, поэтому я решил начать использовать React + Node.js/Python для разработки нового проекта блога. , и, наконец, заменить текущий код блога, его удобно поддерживать и обновлять в будущем, и он также может реализовать улучшение технологии саморазвития, архитектурного дизайна и способности решать проблемы. записывает весь процесс разработки, подводит итоги и делится ими, надеясь добиться прогресса среди читателей. В этой статье рассказывается, как использовать Webpack, Babel, Eslint, document.js и т. д. для создания среды разработки проекта и рабочей среды, что также считается подготовкой проекта. На следующем этапе планируется представить архитектуру и технологию проекта. выбор стека.
Нажмите здесь, чтобы просмотреть адрес исходного кода проекта
npm VS Yarn
В этом проекте мы используем Yarn для управления трехсторонними зависимостями проекта, но не беспокойтесь, Yarn и NPM не конфликтуют и не заменяют NPM, Использование в основном такое же, и вам нужно только понять следующие моменты.
Управление версиями сторонних библиотек
И npm, и Yarn используютpackage.json
Для отслеживания зависимостей проекта номер версии не всегда точен, потому что вы можете определить диапазон номеров версий, разные диапазоны обновлений npm могут привести к тому, что они будут одинаковыми.package.json
На машине файла установлены разные версии пакетов, что может вызвать некоторые различия и конфликты.
Есть ли у npm решение? Доступно в нпмnpm shrinkwrap
Создать файл блокировки версииnpm-shrinkwrap.json
,существуетnpm install
буду читатьpackage.json
Сначала прочитайте этот файл, но когда версия пакета будет обновлена, файл блокировки версии не будет обновляться автоматически, нам придется снова выполнить его вручную.npm shrinkwrap
команда для его обновления.
Итак, каковы преимущества пряжи? Yarn создает (или обновляет) каждый раз, когда добавляется или обновляется пакет установочной библиотеки.yarn.lock
файл, который гарантирует, что на всех машинах будет установлена одна и та же версия пакета, поддерживая при этомpackage.json
Допустимый диапазон версий определен в , отличие от npm в том, что Yarn всегда будет обновляться автоматически.yarn.lock
, а npm нужно обновлять вручную.
одновременная установка
npm обычно устанавливает зависимости одну за другой последовательно, в то время как Yarn поддерживает параллельную загрузку и установку нескольких пакетов сторонних библиотек, каждый из которых работает быстрее и эффективнее.
Автономный кеш
При использовании Yarn для управления пакетами пакет сторонней библиотеки хранится на локальном диске, и следующая установка будет напрямую использовать локальный файл, а не загружать его снова, что, с другой стороны, также повышает скорость установки по сравнению с npm.
Короче говоря, Yarn и npm используют почти одинаково, но его управление версиями более удобно, скорость установки быстрее, и у него больше преимуществ, но на самом деле все его трехсторонние адреса загрузки пакетов библиотек и npm унифицированы.
Webpack
Мы используем инструмент упаковки Webpack в качестве инструмента автоматизированного построения для проекта и управляем JavaScript, CSS, изображениями и другими ресурсами как модулями JavaScript (используя загрузчик Webpack для обработки преобразования) для унифицированного управления. , вы можете обратиться к:
- Webpack создает среду разработки приложений SPA
- Webpack модульно управляет такими ресурсами, как CSS и изображения.
Предвосхищая предыдущую статью, эта статья не ставит целью представить принцип работы и конкретную конфигурацию Webpack, но планирует подумать о том, как лучше организовать Webpack, как использовать Webpack для отчета о разработке проекта и эффективности упаковки с точки зрения разработка и тестирование проекта, а также упаковка.
Конфигурационный файл веб-пакета
Сначала создаем в корневом каталогеwebpack.config.js
Конфигурационный файл:
module.exports = function () {
let env
let _DEV_ = true // 开发环境
let _PROD_ = false // 生产环境
switch (process.env.NODE_ENV) {
case 'dev':
env = 'dev'
_DEV_ = true
_PROD_ = false
break
case 'production':
env = 'prod'
_DEV_ = false
_PROD_ = true
break
default:
env = 'dev'
_DEV_ = true
_PROD_ = false
}
// 根据环境参数动态决定引入对应配置文件
return require(`./webpack/${env}.conf.js`)({
ROOTPATH: __dirname,
_DEV_,
_PROD_
})
}
согласно сprocess.env.NODE_ENV
Параметры среды динамически решают загрузить соответствующий файл конфигурации:
-
dev
:нагрузкаwebpack/env.conf.js
конфигурационный файл; -
prod
:нагрузкаwebpack/prod.conf.js
конфигурационный файл;
Мы создали его в корневом каталоге проектаwebpack
каталог, в котором создаются три конфигурационных файла:
-
base.conf.js
: базовый файл конфигурации, конфигурация, необходимая как в среде разработки, так и в производственной среде; -
dev.conf.js
: конфигурационный файл среды разработки; -
prod.conf.js
: Файл конфигурации упаковки производственной среды;
Конфигурация среды разработки
Некоторые конфигурации сборки для разработки определяются в файле конфигурации среды разработки, а затем для использования вводится базовый файл конфигурации.webpack-merge
Трехсторонняя библиотека объединяет конфигурацию среды разработки с базовым объектом конфигурации, а затем возвращается в среду разработки для упаковки и сборки объекта конфигурации в качестве параметра для упаковки и построения Webpack:
const webpackMerge = require('webpack-merge')
const PUBLICPATH = '/assets/'
const PORT = '9090'
let options = { /* ... */ }
module.exports = function (args) {
options.ROOTPATH = args.ROOTPATH
options.env = args.env
return webpackMerge(require('./base.conf')(options), {
devtool: 'source-map',
devServer: {
contentBase: path.join(args.ROOTPATH, './src'),
historyApiFallback: true,
inline: true,
hot: true,
port: PORT,
proxy: {
'*': `http://localhost:${PORT}/${PUBLICPATH}/`
}
},
plugins: []
})
}
Конфигурация производственной среды
Файл конфигурации производственной среды определяет конфигурацию сборки, используемую в производственной среде, а затем вводит базовый файл конфигурации, используяwebpack-merge
Трехсторонняя библиотека, объедините конфигурацию производственной среды с базовой конфигурацией, а затем верните объект конфигурации в качестве параметра для упаковки и сборки Webpack:
let options = { /* ... */}
module.exports = function (args) {
options.ROOTPATH = args.ROOTPATH
options.env = args.env
return webpackMerge(require('./base.conf')(options), {
plugins: [
new webpack.DefinePlugin({
'process.env': 'production'
}),
// 生成独立css文件
new ExtractTextPlugin({
filename: 'css/[name].css'
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
})
]
})
}
инструкция
Затем нужно настроить исполняемые инструкции для разных сред, мы используемnpm scripts
путь вpackage.json
Команда выполнения конфигурации в файле:
{
"scripts": {
"start": "cross-env NODE_ENV=dev webpack-dev-server",
"build": "cross-env NODE_ENV=production webpack"
}
}
-
start
: Запустите команду в среде разработки, используйтеcross-env
Настройки сторонних библиотекprocess.env.NODE_ENV
дляdev
, и откройте открытый сервер веб-пакета локально, чтобы облегчить открытие; -
build
: Запустите команду в производственной среде, используйтеcross-env
Настройки сторонних библиотекprocess.env.NODE_ENV
дляproduction
, который упакует выходной код и файлы ресурсов;
Наконец выполнитьyarn start
а такжеyarn build
Инструкции могут быть упакованы отдельно для разработки и производства.
Babel
Компилятор общего назначения, который можно настроить и настроить, вам нужно явно указать, что вы ожидаете от Babel, установив **plugins (плагины)илиПресеты (также известные как набор плагинов)**, чтобы проинструктировать Babel, что делать.
конфигурационный файл
Во-первых, вам нужно создать файл конфигурации, то есть создать его в корневом пути проекта.babelrc
документ. Затем введите следующее, чтобы начать:
{
"presets": [],
"plugins": []
}
Затем этот файл конфигурации можно расширить, чтобы указать возможности Babel в этом проекте.
babel-preset-es2015
Мы рассчитываем использовать в проекте синтаксис более новой версии ES6, но, поскольку все еще существует много сред JavaScript, которые не очень совместимы с ES6, Babel требуется для компиляции кода ES6 в код синтаксиса ES5, чтобы обеспечить область применения.
Выполните следующую команду, чтобы установить предустановку Babel «es2015»:
yarn add --dev babel-preset-es2015
Исправлять.babelrc
Конфигурационный файл:
{
"presets": [
"es2015"
],
"plugins": []
}
babel-preset-stage-num
Кроме того, все еще есть некоторые предложения для JavaScript, которые находятся в разработке и могут стать частью стандарта в ближайшем будущем, поэтому в настоящее время предлагаются эти проекты, содержание обновляется до тех пор, пока оно окончательно не станет стандартом, и процесс добавления в стандартную библиотеку разбито на 5 (0-4) этапы. В соответствии со статусом и содержанием предложения оно обновляется на различных этапах (от этапа 0 до этапа 3), и, наконец, на этапе 4 предложение официально принимается стандартом, конечно, предложение, которое не принято, не будет войти в этап 4.
Вот пресеты пакета на 4 разных этапах:
babel-preset-stage-0
babel-preset-stage-1
babel-preset-stage-2
babel-preset-stage-3
Примечание. Пресета stage-4 не существует, на самом деле он описан выше.es2015
предустановлен.
Каждый из вышеперечисленных пресетов содержит последующий пресет post-stage, а также может содержать дополнительные функции. Например,babel-preset-stage-0
Включатьbabel-preset-stage-1
,babel-preset-stage-2
,babel-preset-stage-3
,а такжеbabel-preset-stage-1
содержитbabel-preset-stage-2
,babel-preset-stage-3
Отжимайтесь по очереди.
Мы выбрали пресеты, которые поддерживают наиболее полные функции:
yarn add --dev babel-preset-stage-0
существует.babelrc
В файл конфигурации добавляем:
{
"presets": [
"es2015",
"stage-0"
],
"plugins": []
}
babel-preset-react
Наш проект предполагает использовать React для разработки, поэтому нам необходимо расширить поддержку синтаксиса React/JSX и установить пресеты:
yarn add --dev babel-preset-react
.babelrc
В файл конфигурации добавляем:
{
"presets": [
"es2015",
"stage-0",
"react"
],
"plugins": []
}
babel-polyfill
Пока с помощью Babel наш проект может поддерживать почти весь синтаксис ES6 и ES7, но он бессилен для нового JavaScript API, такого какSymbol
Этот новый API нельзя получить с помощью преобразования синтаксиса, поэтому нам нужен другой способ решить эту проблему.
Polyfill предлагается в отрасли для добавления дополнительного кода, чтобы текущая операционная среда поддерживала собственные API, которых не существует, и для расширения сферы использования API, которые все еще находятся в стадии разработки.
yarn add babel-polyfill
Не надо сюда добавлять--dev
параметр.
Затем импортируйте его в запись файла:
import "babel-polyfill";
babel-runtime
Как упоминалось выше, Babel поддерживает разработку кода с использованием ES6 и других обновленных грамматик путем преобразования грамматики.В настоящее время Babel будет внедрять вспомогательный код в заголовок каждого обрабатываемого файла, что будет генерировать много избыточного и повторяющегося контента, в результате в коде Объем резко вырос, поэтому нам нужно извлечь эти вспомогательные коды в унифицированную среду.Babel предоставляет среду выполнения.
Для реализации среды выполнения Babel необходимо установитьbabel-plugin-transform-runtime
а такжеbabel-runtime
:
yarn add --dev babel-plugin-transform-runtime babel-runtime
затем обновите.babelrc
:
{
"plugins": [
"transform-runtime",
]
}
Загрузка по запросу (babel-plugin-import)
Во многих случаях нам не нужен самодельный пользовательский интерфейс для развития бизнеса, и мы выбираем некоторые библиотеки компонентов с открытым исходным кодом для быстрой разработки и внедрения продуктов, таких как antd, weui, material-ui и т. д. Мы можем напрямую загружать все модули стороннюю библиотеку заранее, но много раз мы надеемся, что она может реализовать загрузку по запросу и уменьшить объем исходного пакета кода.На данный момент мы можем объявить в файле конфигурации babel загрузку сторонней библиотеки на спроса. Конечно, мы должны сначала установить плагинbabel-plugin-import
:
yarn add --dev babel-plugin-import
затем в файле конфигурации.babelrc
Добавьте конфигурацию в:
{
"plugins": [
"import",
{
"style": "../styles", // 加载样式解析方式,(值为true时,可能是less/Sass),此处值设为相对libraryName具体模块请求路径值
"libraryDirectory": "", // 加载包的目录,(默认是lib,即node_modules/lib/)
"libraryName": "material-ui" // 加载三方组件库名,当然另外需要安装该三方库
}
]
}
На данный момент загрузчик webapck не может быть добавлен при обработке CSS.exclude: /node_modules/
.
другие плагины
Мы также можем настроить установку плагинов в соответствии с реальными потребностями и увлечениями проекта.Для получения дополнительной информации см.Официальная документация плагина.
Рекомендовать здесьbabel-pliugin-transform-s2015-classes
Расширения плагинов для реализации встроенных объектов класса JavaScriptextends
Унаследованные функции, см. документациюES2015 classes transform.
yarn add --dev babel-plugin-transform-es2015-classes
существует.babelrc
Добавьте содержимое плагинов в файл:
{
"plugins": [
"transform-runtime",
"transform-es2015-classes",
[
"import",
{
"style": "css",
"libraryDirectory": "",
"libraryName": "material-ui"
}
]
]
}
Проверка грамматики (Эслинт)
Для обеспечения качества кода очень важно унифицировать стиль кода, полагаться на устное согласие команды явно неудовлетворительно, поэтому обычно необходимо выполнять определение синтаксиса кода на уровне автоматизированного построения. Существует множество инструментов обнаружения синтаксиса, таких как jslint и eslint, которые используются в настоящее время. Самый высокий показатель — eslint, поэтому наш проект также представляет eslint, сначала установите зависимости:
yarn add --dev eslint
Более подробная информациядокумент конфигурации, ниже кратко представлены основные.
конфигурационный файл
Затем создайте файл конфигурации eslint в корневом каталоге проекта..eslintrc
, содержимое является объектом:
{}
Парсер (парсер)
Кроме того, ESLint по умолчанию используетEspreeВ качестве его парсера можно указать в конфигурационном файле другой парсер, например, babel-eslint, esprima и т. д. В нашем проекте используется babel-eslint:
yarn add --dev babel-eslint
добавить в конфигурационный файлparser
Атрибуты:
{
"parser": "babel-eslint"
}
eslint-plugin-babel
eslint также поддерживает дополнительные установочные плагины для расширения eslint, такие какeslint-plugin-babel
, плагин работает сbabel-eslint
Сотрудничество, чтобы eslint мог лучше работать с babel одновременно, подробнее см.Справочная документация.
yarn add --dev eslint-plugin-babel
Добавьте объявление в файл конфигурации:
{
"plugins": [
"babel"
],
}
aslant-plugin-react
По умолчанию eslint определяет синтаксис языка JavaScript. Для таких фреймворков, как React/JSX, которые содержат собственный пользовательский синтаксис и синтаксический сахар, необходимо установить дополнительные плагины для использования в сочетании с eslint. Поэтому использование eslint для обнаружения синтаксиса, специфичного для React необходимо установить.eslint-plugin-react
Плагин:
yarn add --dev eslint-plugin-react
Добавьте файл конфигурации:
{
"plugins": [
"babel",
"react"
]
}
Расширяет
В дополнение к пользовательским правилам проверки грамматики мы можем использовать интегрированный пакет расширений, предоставляемый Eslint, для использования общих объектов конфигурации обнаружения грамматики, таких какeslint-config-standard
а такжеeslint-config-standard-react
:
yarn add --dev eslint-config-standard eslint-config-standard-react eslint-plugin-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node eslint-plugin-react
Примечание. eslint-plugin-react, упомянутый в предыдущем разделе, включен сюда для поддержки пакета конфигурации eslint-config-standard-react.
затем в.eslintrc
Добавьте расширение в файл конфигурации:
{
"extends": [
"standard",
"standard-react"
]
}
Если вы не хотите использовать такие встроенные правила определения синтаксиса, вы можете удалить содержимое в файле конфигурации и удалить зависимости:
yarn remove eslint-config-standard eslint-config-standard-react eslint-plugin-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node eslint-plugin-react
Грамматические правила (правила)
Чтобы добавить правила грамматики, просто объявите вrules
объект собственности, например:
{
"rules": {
"strict": 0,
"semi": 2, // 强制语句末尾添加符号,否则报错
"quotes": [
1,
"single"
],
}
}
Структура правила
При объявлении правила обнаружения грамматики вам необходимо установить идентификатор правила в одно из следующих значений:
-
"off"
или0
- закрыть правила -
"warn"
или1
- Включите правило для использования ошибок уровня предупреждения:warn
(не приведет к выходу из программы) -
"error"
или2
- Включите правило, чтобы использовать ошибку уровня ошибки:error
(При срабатывании программа выйдет)
{
"rules": {
eqeqeq: 0, // or "off"
curly: 2 // or "error"
}
}
Некоторые правила также могут иметь дополнительные параметры конфигурации, которые можно указать с помощью массива, например:
{
"rules": {
"eqeqeq": "off",
"curly": "error",
"quotes": ["warn", "single"] // 开启使用单引号,若使用双引号将发出警告
}
}
инструкция
Чтобы выполнить проверку синтаксиса, просто выполните./node_modules/.bin/eslint src
(Проект устанавливает eslint локально, а не глобально, нужно указать путь выполнения скрипта), он пройдет проверкуsrc
Все файлы исходного кода в синтаксисе каталога и вывод результатов, конечно, нам, наконец, нужно поставить инструкции в соответствии сnpm scripts
каноническая вставкаpackage.json
документ:
{
"scripts": {
"lint": "eslint --cache --fix src"
}
}
При выполнении директив с помощью сценариев npm, независимо от того, установлен ли проект локально или глобально, путь к сценарию директивы можно опустить, так как npm автоматически сопоставит доступные пути.
Документация
Отличный проект, конечно, незаменим для документации. Документация может помочь другим разработчикам быстро понять содержание и ход всего проекта. Она также помогает находить контент и отслеживать источник при исправлении ошибок. Поэтому документация необходима. Поэтому, благодаря исследованиям я нашел JSdoc и JSdoc.documentation.jsПомогает автоматизировать производство документации по API.
documentation
а такжеJSdocТочно так же документация также автоматически создает проектную документацию на основе комментариев к коду, при условии, что наши комментарии к коду должны соответствовать их рекомендациям по спецификации.Обратитесь к документации JSdoc.
Сначала мы устанавливаемdocumentation.js:
yarn add --dev documentation
инструкция
Затем можно выполнить команду:
./node_modules/.bin/documentation build src/app.js -f md > API.md
Вы обнаружите, что файл API.md выводится в корневом каталоге.
Настраиваем в файле package.jsonnpm scripts
Выполните скрипт:
"scripts": {
"doc": "./node_modules/.bin/documentation build src/app.js -f md > API.md"
}
Когда документация установлена локально в проекте, нужно указывать при выполнении команды прямо в терминале командной строки./node_modules/.bin/documentation
Путь, если он установлен глобально, его можно использовать только напрямуюdocumentation
инструкция. Чтобы выполнить шаги в package.json, вы можете напрямую сократить его, и npm автоматически сопоставит его для нас.
Нажмите здесь, чтобы просмотреть адрес исходного кода проекта