tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Lightning Design Systemとnpm install

Lightning Design Systemのダウンロード方法の1つに『npm install』を利用する方法が用意されています。
f:id:tyoshikawa1106:20160331073015p:plain

$ npm install @salesforce-ux/design-system --save


この方法でダウンロードすると『.node_module』フォルダの中にダウンロードされるのですが、こうやってダウンロードした場合、linkタグでの読み込みがうまくいかないしどうやって利用すればいいんだろうと思っていました。


その問題の解決方法がこちらで紹介されていました。


npm installコマンドでダウンロードした後、sassをつかって@importで取り込めばよかったみたいです。
f:id:tyoshikawa1106:20160331073446p:plain

@import "./node_modules/@salesforce-ux/design-system/scss/index.scss";


sassはどうやって利用すればいいんだろうという問題もあったのですが、これはgulpをつかえば解決できました。

Gulpの基本的な使い方について確認してみました - tyoshikawa1106のブログ


@importしたあとSassをコンパイルしてcssファイルに変換すると次のようになります。
f:id:tyoshikawa1106:20160331073657p:plain

f:id:tyoshikawa1106:20160331073732p:plain


linkタグではこのcssファイルの方を読みこめば大丈夫です。
f:id:tyoshikawa1106:20160331073848p:plain

<link rel="stylesheet" href="stylesheets/css/style.css">


この方法のいいところはsassをつかってSLDS側に用意された変数をカスタマイズしたりできることだと思います。また読み込むCSSファイルが1つにまとまりスッキリします。


CSSの読み込みはこれでうまく行きましたが、もう一つ問題が残りました。SLDSディレクトリにあるassetsフォルダ内のアイコンなどがこのままでは読み込めません。(.node_moduleからパスを指定してもダメでした。)
f:id:tyoshikawa1106:20160331074151p:plain


まだ解決できていないのですが、gulpをつかってassetsの内容をコピーすればうまくいくんじゃないかと思います。このコピー方法についても参考になるサイトが見つかりました。


これでうまくいったら追記しようと思います。現時点でのサンプルはこちらです。

追記

Gulpをつかったファイルのコピーですがうまくいきました。

gulp.task("slds-copy", function() {
    return gulp.src("./node_modules/@salesforce-ux/design-system/assets/**/*")
        .pipe(gulp.dest( './public/lib/SLDS/assets/' ) );
});


このタスクを実行するとnode_module内のSLDSフォルダを任意の場所にコピーできます。
f:id:tyoshikawa1106:20160331092428p:plain:w300


補足ですが、サンプルコードを見てて気になったのが次のように『/**/*』という宣言です。

assets/**/*

これはどういう意味だろうと調べてみると次のサイトに解説がありました。

gulp.js を今一度キチンと!gulp.js 導入基礎 - HAM MEDIA MEMO

特定のディレクトリ以下全てのファイルとディレクトリを扱う場合は上記のように指定すればいいみたいです。確かに『assets/*』という指定をしたとき、フォルダはコピーされたのですが、フォルダ内のファイルはコピーされませんでした。


SLDSファイル一式の利用準備はできたので後は次のように宣言すれば普通に利用できます。

<svg aria-hidden="true" class="slds-button__icon">
  <use xlink:href="./vendor/SLDS/assets/icons/utility-sprite/svg/symbols.svg#home"></use>
</svg>


これでアイコンは表示できるようになりました。ですがまだうまくいっていない箇所があります。フォントの読み込みです。
f:id:tyoshikawa1106:20160331093129p:plain


Salesforce外で利用すると発生するエラーなのですが、Sassをつかったカスタマイズで解決できました。一番上のリンク先で紹介されていた方法ですが、次のような感じで『$static-font-path』変数の値を変更すれば解決します。

$static-font-path: "../../vendor/SLDS/assets/fonts/webfonts";
@import "./node_modules/@salesforce-ux/design-system/scss/index.scss";


これですべてのエラーがなくなり、気持よく利用できるようになりました。
f:id:tyoshikawa1106:20160331093641p:plain

Gulpタスクの一括実行について

おまけですが、今回GulpのタスクがsassのコンパイルとSLDSファイル一式をコピーする2つになりました。複数タスクの一括実行はできるのかなと確認したところ次のようにタスクを用意すればいいみたいです。

gulp.task('default', ['sass','slds-copy']);

※並列実行されるそうです。

f:id:tyoshikawa1106:20160331095401p:plain