npm-scripts だけで
SVG画像のインライン化

をしてみた

npm-scriptsのススメ

About

mimi(yumi)

たぶんフロントエンドエンジニア

HTML, CSS, PHP,  Node.js,

Drawing, Knitting, Sawing etc.

React.js, Nuxt.js, Python

 

 

名前:

生業:

好きな技術:

 

気になる技術:

 

WordPress歴:

WordPressの好きなところ:

10年余

オープンソース、REST API

@miminari

Today's topic

  • npm-scriptsがナンバーワンになったよ!
  • npm-scripts でSVG画像をインライン化してみた
  • WordPressへの導入をさらっと

The Front-End Tooling Survey 2018

タスクランナー部門 第一位!

47.8%

npm-scripts

SVG画像のインライン化を

やってみようと思ったワケ

SVG画像の自動インライン化を導入したい!

日本語だとパッと見Gulpでの方法しか見当たらないけれど、

npm-scripts でもいけるはず!

 

ココ数年、Gulpで自作アイコンフォントを作成していた

postcss-inline-svg

PostCSS のプラグイン。

SVGファイルをCSSにインライン化してくれる。

これだけでできました。

{
  "name": "svginline",
  "version": "1.0.0",
  "description": "sass compile, and svg inline etc.",
  "scripts": {
    "sass": "node-sass --include-path scss scss/style.scss style.css",
    "svginline": "npx postcss *.css --use postcss-inline-svg -d ../ --no-map",
    "build": "npm run sass && npm run svginline"
  },
  "dependencies": {
    "cpx": "^1.5.0",
    "postcss-cli": "^5.0.0",
   },
  "devDependencies": {
    "node-sass": "^4.9.0",
    "postcss-inline-svg": "^3.1.1",
  }
}

package.json

※ SVG画像の最適化もしていますが、ここには入れていません。

必要な環境

  • Node.js

使った    ライブラリ

  • cpx
    … ファイルのコピーや監視機能を担ってくれるお利口さん。
  • node-sass
    ... Sassのコンパイル担当。Sassが手放せない私の生命線。
  • postcss-cli
    ... PostCSSのcliです。
  • postcss-inline-svg
    … 今日の主役。
    CSSファイルに指定したSVGファイルをインライン化してくれます。

Just Code!

$link-color: #24241E;
@svg-load arrow-right url(svg/dist/icons/angle-right.svg) {
    fill: $link-color;
}

.m-btn {
    display: inline-block;
    margin: 1em 0;
    a {
        text-decoration: none;
    }
    &__link {
        border: 1px solid $link-color;
        color: $link-color;
        padding: .5em 0 .5em 1em;
        text-decoration: none;
        border-radius: 3px;
        &:after {
            content: '';
            background-image: svg-load('svg/dist/icons/angle-right.svg', fill=rgba($link-color,0.3));
            background-size: contain;
            background-repeat: no-repeat;
            height: 1.5em;
            width: 1.5em;
            display: inline-block;
            margin-left: .5em;
            vertical-align: bottom;
        }
    }
}

svg-load('svg画像へのパス',fill=色)

style.scss

Build

npm run build

※ もちろん watch もできるよ!

/* 前略 */
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 512' fill='rgba(36, 36, 30, 0.3)'%3E%3Cpath d='M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z'/%3E%3C/svg%3E");
/* 後略 */

Done!

style.css

html

<span class="m-btn"><a class="m-btn__link" href="#">ボタン</a></span>

preview

※ 命名規則はスルーしてください。

私が npm-scripts を

好きなワケ

SIMPLE

WordPressへの導入例

「既存のテーマに

Sassのコンパイルと圧縮

だけ導入してみる」

YourTheme/
    ├ dev/
        ├ package.json
        └ scss/
    ├ style.css
    ├ style.min.css
    └ (その他お馴染みのwordpress関連ファイル)
{
  "name": "myTemplate",
  "version": "1.0.0",
  "description": "sass compile, minmum etc.",
  "scripts": {
    "compile-sass": "node-sass --include-path scss scss/style.scss ../style.css",
    "publish": "node-sass --include-path scss scss/style.scss ../style.css --output-style compressed",
    "watch": "node-sass --include-path scss scss/style.scss ../style.css -w"
 },
  "dependencies": {
    "node-sass": "^4.9.0"
  }
}

必要なのは

・node-sass
のみ

package.json
ディレクトリ構成例

あとはコマンドを

入れるだけでOK

npm install
npm run watch
npm run publish
インストール
ファイル監視
CSSの圧縮
@wordpress-blue: #0073AA;
.mystyle {
    a {
        color: @wordpress-blue;
    }
}
.mystyle a {
     color: #0073AA;
}

SASS(SCSS)

CSS

保存するだけでコンパイル

@miminari

シンプルに小さく導入することが出来るので

個人や小さいグループの開発も多い

WordPressにも最適かと

※ 個人の感想です