by yugasun from yugasun.com/post/there-ma…Эта статья может быть воспроизведена полностью, но должны быть сохранены первоначальный автор и источник.
Среда разработки
Поскольку это настоящий бой, как он может быть неотделим от среды разработки проекта? В первую очередь рекомендую свою личную среду разработки:
аппаратное оборудование: Mac OS Xпереводчик: Код Visual Studioинструмент командной строки: iTerm2инструменты отладки: Инструмент Chrome Dev + vue-devtoolsУправление версиями: Гит
Здесь не будет показан рабочий интерфейс конкретного инструмента и способы его использования. Просто используйте поисковую систему для поиска соответствующих вводных. Вы можете выбрать подходящую вам среду разработки в соответствии с вашими личными предпочтениями.
Модульная разработка
Использование VUE в предыдущих статьях - непосредственно представить исходный код для использования, но фактический проект разработки, как правило, очень сложен, и будет включать множество шаблонов страниц, для нас невозможно написать все функции в одном и том же файле JS, А затем через введение тегов скрипта делает все более труднее поддерживать, поскольку проект растет, поэтому проект нуждается в модульной разработке.
О том, что такое модуляризация, и как модульизировать наш проект, рекомендуется прочитатьВведение в модульность JavaScript I: Понимание модулейа такжеВведение в модульность JavaScript II: упаковка и построение модулей.
Когда кода проекта становится все больше и файлов наших модулей становится все больше и больше, нам нужны инструменты, помогающие нам лучше управлять этими модулями и упаковывать их, чтобы мы могли лучше сосредоточиться на модульной разработке, а не на этих тривиальных вещах. тогдаwebpack
Аналогичные инструменты должны быть поставлены, конечно, кромеwebpack
Есть много подобных инструментов, каждый со своими преимуществами, такими как:rollup,parcel....
Все примеры в будущих статьях будут использованыwebpack
из3.x
Инструмент версии для завершения разработки с Vue.
начальный веб-пакет
Я должен сказать здесь, что когда многие друзья разрабатывают проекты Vue, они используют его, как только появляются.vue-cliИнструменты скаффолдинга разрабатывают проекты, хотя шаблоны проектов можно создавать быстро, не обращая внимания на проблемы начальной настройки. Но я не рекомендую этого делать, потому что этоvuejs + webpack + es6 + babel + eslint...
Подождите появления различных инструментов, и некоторые люди начнут использовать их, прежде чем узнают, что они из себя представляют. Если что-то пойдет не так, я не знаю, что делать. Хотя помощь поисковых систем может помочь нам решить 80% проблем, по-прежнему требуется много энергии для поиска и запросов, продолжайте попытки, и когда проблема будет решена, пройдет один день, и выигрыш перевесит потери. .
Поэтому я предлагаю научиться использовать сначалаwebpack
В начале будет легче принять его, вводя его шаг за шагом. Ведь большинство людей в этом мире не гении.Чтобы научиться бегать, нужно сначала научиться ходить.
Хотя нынешнее общество относительно порывистое, мирное сердце и приземленность — это путь к успеху~
Ну и без лишних слов, давайте сразу к сегодняшней теме,Удачная разработка проекта Vuejs с помощью веб-пакета.
Прежде чем читать код ниже, пожалуйста, ознакомьтесь с использованием модулей nodejs, включая базовую установку зависимостей модулей через npm и как ввести сторонние модули для использования.Хотя это будет упомянуто здесь, это не будет подробно объяснено .
Мы сначала создаем новую папку проекта, создаем новую в корневом каталогеindex.html
, код показан ниже:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue webpack demo</title>
</head>
<body>
<div id="app"></div>
<script src="./build.js"></script>
</body>
</html>
запуск из командной строкиnpm init
, согласно интерактивным подсказкам, заполните соответствующую информацию проекта (конечно, она вся на английском языке, если вы не умеете читать, то можете понять ее напрямую), после заполнения, корень проекта каталог появитсяpackage.json
(чтобы ознакомиться с содержимым файла package.json, вы можете прочитать эту статью:файл package.json). затем пройтиnpm
устанавливаем то, что нам нужноvue
Библиотеки:
# 添加 --save 参数,会将 vue 依赖添加到 package.json 文件中
npm install vue --save
затем создайте новыйsrc
каталог, вsrc
создать каталогapp.js
Входной файл, код выглядит следующим образом:
// 模块化的引入 vue,并将其赋值给 Vue 变量
var Vue = require('vue')
new Vue({
el: "#app",
template: "<h1>{{ msg }}</h1>",
data () {
return {
msg: 'Hello Vue.js'
}
}
})
Конечноrequire
Функция браузера не распознана, необходимо пройтиwebpack
Другой код ES5 помогает нам добиться компиляции и упаковки, а также преобразования его в основные браузеры.
Установить первымwebpack
Зависимости пакетов:
# 添加 --save-dev 参数,会将 webpack 开发依赖添加到 package.json 文件中
npm install webpack --save-dev
Затем создайте его в корневом каталоге проекта.webpack.config.js
файл, код такой:
module.exports = {
// 入口文件
entry: './src/app.js',
// 编译输出文件
output: {
filename: 'build.js'
},
resolve: {
alias: {
// 因为我们这里用的是 require 引入方式,所以应该使用vue.common.js/vue.js/vue.min.js
'vue$': 'vue/dist/vue.common.js'
}
}
}
из-за вышеизложенногоindex.html
Введен в составbuild.js
файл, чтобы увидеть эффект проявки, его нужно запустить вручнуюwebpack
Команда упаковки:
./node_modules/.bin/webpack
Здесь, если вы хотите запустить напрямую
webpack
, Вам нужен компьютер для установки глобального веб-пакета, запустивnpm install webpack -g
команда для глобальной установки.
Затем вы увидите следующий вывод:
$ webpack
Hash: 8a61c2605578f38f46cd
Version: webpack 3.10.0
Time: 386ms
Asset Size Chunks Chunk Names
build.js 104 kB 0 [emitted] main
[0] (webpack)/buildin/global.js 509 bytes {0} [built]
[1] ./src/app.js 148 bytes {0} [built]
+ 4 hidden modules
В этот момент появится корневой каталогbuild.js
файл, мы откроем его через браузерindex.html
файл, появилась знакомая картинка,Hello Vue.js
.
здесь простой на основеvue + webpack
Строительство проекта завершено, очень просто, не терпится попробовать самому? Конечноwebpack
Функционал намного больше. Более подробно о функциях см.официальная документация, чтобы полностью понятьwebpack
власти.
живая перезагрузка
В приведенном выше примере также есть проблема, то есть каждый раз, когда мы обновляем код, нам нужно переупаковывать и компилировать, а также вручную обновлять браузер, чтобы увидеть эффект наших изменений, что действительно хлопотно. Автор webpack также рассматривал эту проблему и параллельно развивал ее.webpack-dev-server
инструменты, которые помогут нам достичьlive reloading
Функция , то есть когда мы обновляем код, браузер будет обновляться в режиме реального времени, показывая обновленный эффект.
Спешите использовать его ~ Сначала установите зависимости:
npm install webpack-dev-server --save-dev
затем изменитьwebpack.config.js
Файл конфигурации выглядит следующим образом:
module.exports = {
// 入口文件
entry: './src/app.js',
// 编译输出文件
output: {
filename: 'build.js'
},
resolve: {
alias: {
// 因为我们这里用的是 require 引入方式,所以应该使用vue.common.js/vue.js/vue.min.js
'vue$': 'vue/dist/vue.common.js'
}
},
// 这里添加的是有关 webpack-dev-server 的配置
devServer: {
// 这里定义 webpack-dev-server 开启的web服务的根目录
contentBase: './'
}
}
Затем выполните команду:
./node_modules/.bin/webpack-dev-server
Консоль выведет следующее:
$ ./node_modules/.bin/webpack-dev-server
Project is running at http://localhost:8080/
webpack output is served from /
Content not from webpack is served from ./
Hash: d33155f6797f2c78c448
Version: webpack 3.10.0
Time: 903ms
Asset Size Chunks Chunk Names
build.js 627 kB 0 [emitted] [big] main
[0] (webpack)/buildin/global.js 509 bytes {0} [built]
[3] multi (webpack)-dev-server/client?http://localhost:8080 ./src/app.js 40 bytes {0} [built]
[4] (webpack)-dev-server/client?http://localhost:8080 7.91 kB {0} [built]
...
[28] ./node_modules/timers-browserify/main.js 1.9 kB {0} [built]
+ 15 hidden modules
webpack: Compiled successfully.
Откройте браузер и посетите: http://localhost:8080.В это время снова появляется знакомый экран, O(∩_∩)O~~. Давайте попробуем изменитьapp.js
серединаmsg
Контент, контент браузера тоже изменится, это круто, давайте попробуем.
Используйте npm-скрипты
Для команды упаковки выше./node_modules/.bin/webpack
и живые команды разработки./node_modules/.bin/webpack-dev-server
, хотя вы можете быстро скопировать и вставить ввод в командной строке, но первый раз все равно неизбежен. Как ленивый программист, как вы можете печатать столько лишних символов? в самый разpackage.json
в файлеscripts
Поля могут помочь нам решить эту проблему.
Давайте посмотрим на введение:
Скрипты — это аббревиатуры командной строки npm, используемые для указания запущенных команд скрипта, например, start указывает запущенный
npm run start
, соответствующая команда должна быть выполнена.
Хорошо, теперь, когда мы поняли, что он делает, давайте попробуем его переписать.package.json
файл, изменитьscripts
Поля следующие:
"scripts": {
"dev": "webpack-dev-server",
"build": "webpack"
}
Затем в командной строке введите:
npm run dev
ты найдешь и исполнишь./node_modules/.bin/webpack-dev-server
тот же эффект.
Примечание: здесь
scripts
указано вwebpack-dev-server
Команда такова, что путь к команде опущен, потому что, когда npm выполняет скрипт, он по умолчанию сначала выполняет текущий каталог../node_modules/.bin/
Команда в , если команда не найдена, выполняется глобальная команда.
Точно так же выполнитьnpm run build
это упаковать и вывести то, что мы хотимbuild.js
документ.
Препроцессор CSS
Несмотря на то, что css достаточно мощен, в глазах программистов он всегда был очень хлопотным: в нем нет ни переменных, ни условных операторов, только простое построчное описание, которое довольно хлопотно написать. Такие разныеПрепроцессор CSSпоявился на свет, из которых мой любимыйSASS, использование синтаксиса sass для написания наших файлов стилей значительно повысит эффективность нашей разработки и значительно упростит разработку css.
Далее мы расскажем, как интегрировать его в наш проект.
для веб-пакета一切皆模块
, все файлы формируют зависимости через введение модуля, а введение или предварительная обработка каждого модуля выполняется черезloader
сбываться. потому что нашsass
Браузеры синтаксиса не распознаются, поэтому вам нужно использовать соответствующиеloader
Для его продвижения превращение в соответствующиеcss
. Хотя css браузер может распознать, ноwebpack
По сути, упаковщик статических модулей для приложений javascript, все содержимое файла будет обработано как javascript, а затем подвергнуто постобработке. Так что здесь кроме необходимости предобработкиsass
изloader
, также нужно загрузитьcss
изloader
, и, наконец, нужно пройтиstyle-loader
Прийти в динамику, созданные кстати JSstyle
пометитьindex.html
середина.
Зная это, мы знаем, что делать, сначала установить необходимыеloader
:
# 因为 `sass-loader` 需要依赖 `node-sass`, 所以这里一并安装
npm install style-loader css-loader sass-loader node-sass --save-dev
Исправлятьwebpack.config.js
файл конфигурации, добавить связанныеloader
Конфигурация:
module.exports = {
//...
module: {
// 这里用来配置处理不同后缀文件所使用的loader
rules: [
{
test: /\.scss$/,
use: [
{
loader: 'style-loader'
},
{
loader: 'css-loader'
},
{
loader: 'sass-loader'
}
]
}
]
}
}
Загрузчик веб-пакета поддерживает цепную передачу. Он может использовать конвейерную обработку ресурсов. Группа цепных загрузчиков будет обрабатываться в обратном порядке. Поток обработки здесь: sass-загрузчик -> css-загрузчик => стиль-загрузчик
Настроили, сейчас протестируем, вsrc
создать каталогapp.scss
файл со следующим содержимым:
$red: rgb(218, 42, 42);
h1 {
color: $red;
}
затем вsrc/app.js
Внесено в файл:
require('./app.scss');
var Vue = require('vue');
new Vue({
el: "#app",
template: "<h1>{{ msg }}</h1>",
data () {
return {
msg: 'Hello Vue.js'
}
}
});
бежать сноваnpm run dev
, вы найдете нашh1
Изменился цвет этикетки. Проверяя элементы, можно обнаружитьindex.html
изhead
Добавлен новый ярлык вstyle
Этикетка, содержание есть,app.scss
Вывод компиляции:
h1 {
color: #da2a2a;
}
Если это не ясноsass
Для использования рекомендуется ознакомиться с этим основным вводным документом:Руководство по использованию SASS
загрузка изображения
Теперь, когда мы говорим о статических ресурсах css, естественно загружать изображения. Как было сказано выше, в вебпаке все является модулем, и картинки, разумеется, вводятся в виде модулей. Поскольку это модуль, связанный с ним импортированный загрузчик, естественно, незаменим.Здесь мы используем импортированный образ.url-loader
, сначала установите его:
npm install url-loader --save-dev
Добавить кurl-loader
Конфигурация:
module.exports = {
// ...
module: {
// 这里用来配置处理不同后缀文件所使用的loader
rules: [
// ...
{
test: /\.(jpe?g|gif|png)$/,
use: 'url-loader'
}
]
}
}
после этогоapp.js
Представлен в:
require('./app.scss');
var Vue = require('vue');
var logoSrc = require('./logo.jpg')
new Vue({
el: "#app",
data () {
return {
msg: 'Hello Vue.js'
}
},
render (h) {
return (
h('div', [
h('img', {
domProps: {
src: logoSrc,
alt: 'logo',
className: 'logo'
}
}),
h('h1', this.msg)
])
)
}
});
Здесь мы используем
render
функция для пользовательского рендеринга нашего узла с параметрами по умолчаниюh
это мыпричудливые целевые элементы рендерингаупомянулcreateElement
Это просто псевдоним параметра, здесь для простоты написания.h
Первый параметр функцииdom
Имя, вторым параметром является объект конфигурации при создании, черезdomProps
для добавления значений свойств, связанных с DOM. Здесь мы представляемlogoSrc
назначенный емуsrc
Атрибуты.
затем повторитеnpm run dev
, то, что мы хотим, появляется на страницеlogo
картинка тоже.
Суммировать
知己知彼,百战不殆
, мы только действительно понимаемwebpack
Использование навыков, в реальной разработке, нам будет более кстати. Не пугайтесь необъяснимой ошибки. У программистов есть три сокровища:多学习,多编写,多总结
, наши навыки программирования будут продолжать улучшаться.