@uvarov.frontend/pug-bem-plain-loader
Version:
Pug that adds BEM shortcuts to plain html loader for webpack
158 lines (130 loc) • 3.5 kB
Markdown
# pug-bem-plain-loader
**Pug** that adds **BEM** shortcuts to plain html loader for **webpack**
**pug-bem-plain-loader** is a combination of [pug-plain-loader](https://www.npmjs.com/package/pug-plain-loader) and [pug-bem](https://www.npmjs.com/package/pug-bem) plugins
- **[BEM](https://en.bem.info/methodology/quick-start/)**
# New! v1.1.0
Now you can specify your own prefixes for blocks in the **b** property:
```js
loaders: {
'pug': {
loader: 'pug-bem-plain-loader',
options: {
b: 'my-' // block prefix
}
}
}
```
**or**
```js
loaders: {
'pug': {
loader: 'pug-bem-plain-loader',
options: {
b: true // default 'b-'
}
}
}
```
- **[More](https://www.npmjs.com/package/pug-bem)**
# Install
```
npm install pug pug-bem-plain-loader --save-dev
```
## Usage
Settings match [pug-plain-loader](https://www.npmjs.com/package/pug-plain-loader) and [pug-bem](https://www.npmjs.com/package/pug-bem)
## Example for Vue Single-File Components
### webpack.config.js
```js
module: {
rules: [
... // other rules
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
// this applies to <template lang="pug"> in Vue components
'pug': [
'pug-bem-plain-loader'
]
}
}
}
... // other rules
]
}
```
**or**
```js
module: {
rules: [
... // other rules
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
// this applies to <template lang="pug"> in Vue components
'pug': {
loader: 'pug-bem-plain-loader',
options: {
e: '**', // element separator, default: __
m: '++' // modifier separator, default: --
}
}
}
}
}
... // other rules
]
}
```
- **[Options](https://pugjs.org/api/reference.html)**
### App.vue
```pug
<template lang="pug">
header.header
nav.menu
a(href="#")._logo Company
.list
a._item.-active(href="#") Home
a._item(href="#") News
a._item(href="#") Gallery
a._item(href="#") Partners
a._item(href="#") About
a._item(href="#") Contacts
h1._title Hello, World!
.myslider._myslider
._slide Content
._slide.-active Content
._slide Content
p._text Good weather
</template>
```
### Result
```html
<header class="header">
<nav class="menu">
<a class="menu__logo" href="#">Company</a>
<div class="list">
<a class="list__item list__item--active" href="#">Home</a>
<a class="list__item" href="#">News</a>
<a class="list__item" href="#">Gallery</a>
<a class="list__item" href="#">Partners</a>
<a class="list__item" href="#">About</a>
<a class="list__item" href="#">Contacts</a>
</div>
</nav>
<h1 class="header__title">Hello, World!</h1>
<div class="myslider header__myslider">
<div class="myslider__slide">Content</div>
<div class="myslider__slide myslider__slide--active">Content</div>
<div class="myslider__slide">Content</div>
</div>
<p class="header__text">Good weather</p>
</header>
```
## License
ISC License
## Author
Legostaev Vadim (*legostaev.vadim@mail.ru*)