LoginSignup
1
1

More than 5 years have passed since last update.

bowerとgulpのお勉強

Last updated at Posted at 2016-04-23

abst.

bowerは使ったことがあるが、ディレクトリ構造を調整したなとは思っていた。
gulpを使ってタスクを実行して振り分ける方向で。

また、ブートストラップでマテリアルデザインを適用するようにしたい。
http://qiita.com/tiwu_official/items/280b73bc19f9fea53099

nodebrew

nodebrewを導入した
http://akiyoko.hatenablog.jp/entry/2015/06/20/132239
http://qiita.com/oreo3@github/items/622fd6a09d5c1593fee4

権限の変更は若干不安だったけどいいなりに変更した
後半のGruntは読んでない

brew installだとダメみたい。
http://qiita.com/armorik83/items/ed97c618a55d9c13c34b

npmのパッケージ管理はjson
http://qiita.com/sinmetal/items/395edf1d195382cfd8bc

今回はテンプレをコピペしたのでinitはしなかったけどメモ。

gulp

公式
https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md

丁寧だけど縦長い、windows向けだったので途中は読み飛ばしつつ、、テンプレートはとても参考になった。
http://labo.dotsmart.biz/web-bootstrap

タスクをディレクトリ分けしてメインスクリプトからincludeする構成

小さな構成の事例として参考。なんとなくGruntとの比較もできた。
http://create-something.hatenadiary.jp/entry/2014/07/27/204633

メインの参考。
http://qiita.com/ka215/items/f54f190e36c454ebea73

モジュールが多くて戸惑ったけど、一覧されていてjsonからインストールできた
(でも、ほかサイトのやり方とバージョン依存でうまく行かなかったのでやりなおした。)
gulpのタスクについての考察もフローがわかりやすい。
ちゃんとやれるようになったらいいなあ。と思いつつ、以降はひとまず呼び飛ばす。

gulpプラグイン

使って効率化するのが正しい使い方っぽい?
npm install --seve-dev gulp-hoge gulp-hoge2

gulp-load-plugins

package.jsonから読み込んでくれる
http://qiita.com/dhun/items/daa207fc05c67f255c23

2016年、僕のおすすめgulpプラグイン | gulp | Horic Design
http://goo.gl/MLmLZo

Gulp.js入門 - コーディングを10倍速くする環境を作る方法まとめ | 株式会社LIG
http://goo.gl/dyQ7k5

俺流gulpレシピ - Qiita
http://goo.gl/YIxVtf

del.bind

削除はプラグインを使わなくてもできる。ワイルドカードとかで複数削除できる。

https://github.com/gulpjs/gulp/blob/master/docs/recipes/delete-files-folder.md
http://qiita.com/shinnn/items/bd7ad79526eff37cebd0

webpack

難しい。

わかりやすい。
http://thujikun.github.io/blog/2014/12/07/webpack/

基本は閉じたスコープで管理される
exposeローダーを使うとグローバルに読み込める(requireは必要になる。)

require(expose?!)

require('expose?$!expose?jQuery!jquery');

jQueryプラグイン

たぶん、jqueryプラグインをwebpackで使うのはあまり良くないのかもしれない。
あまり参考情報がないし。

慣れてないから、とりあえずグローバルで読み込ませたい。
ブラウザのコンソールからも動かしたい。
なかなかうまくいかない。
詳細はわかってないけど、とりあえず動かしてみる。。

# ローダーのインストール
npm install expose-loader --save-dev
npm install style-loader --save-dev
npm install url-loader import-loader --save-dev
npm install url-loader  --save-dev
npm install imports-loader css-loader --save-dev
npm install url-loader file-loader --save-dev
npm install script-loader --save-dev
# pluginのインストール
bower install mbraak/jqTree
bower install carhartl/jquery-cookie

実現パターン1

ProvidePluginの中で指定した

'loaders': [
    // グローバル化
    {test: /jquery\.js/, loader: "expose?$!expose?jQuery"},
    { test: 'tree.jquery.js', loader: "expose?$!expose?jqTree" },
    { test: 'jquery.cookie.js', loader: "expose?$!expose?jquery.cookie" }
]

// bowerのモジュールを読めるようにするために
new webpack.webpack.ResolverPlugin([
    new webpack.webpack.ResolverPlugin.DirectoryDescriptionFilePlugin('.bower.json', ['main'])
]),
//webpack-dev-serverを使っているときに、画面をリロードすることなくモジュールの差し替えを可能にする。(実験的機能)
new webpack.webpack.HotModuleReplacementPlugin(),
//compile時にエラーが出たらskipする。
new webpack.webpack.NoErrorsPlugin(),
//被ってるモジュールがいたらひとつにまとめる。
new webpack.webpack.optimize.DedupePlugin(),
//よく使われるモジュールに降るIDの桁数をより短くすることでよりコードを圧縮する。
new webpack.webpack.optimize.OccurenceOrderPlugin(),
//ファイルを細かく分析し、まとめられるところはできるだけまとめてコードを圧縮する。
// Closure CompilerのADVANCED_OPTIMIZATIONみたいなことはしない。
new webpack.webpack.optimize.AggressiveMergingPlugin(),
// jQuery を自動的にロードする(require('jquery')せずに使用可)
new webpack.webpack.ProvidePlugin({
    '$': 'jquery',
    'jQuery': 'jquery',
    'jQuery.cookie': 'jquery.cookie'
}),
require("jquery.cookie");

実現パターン2

script-loaderをあとから利用して読み込んだ

require('script!jquery.cookie');

その後、普通にrequireでうまくいった

たぶん、ローダーをインストールしたことが関係ある気がする。。

require('jquery.cookie');

coffeeローダー

さらに、jqTreeをCoffeeローダーを使ってcoffeeスクリプトから読み込む

npm install coffee-loader --save-dev
npm install coffee-script --save-dev
'loaders': [
    { test: /\.coffee$/, loader: 'coffee-loader' },
]
require("jqTree/src/tree.jquery");

参考

http://qiita.com/civic/items/82c0184bcadc50965f91
https://webpack.github.io/docs/configuration.html
http://qiita.com/shn/items/7bd544a39ee7ac858669

vue.jsをグローバルにする

exposeのロードがうまくいかない。
と思ったけど、下記を参考にしたらできそうな気がしてる。

いろいろ試して、requireしなくてもよい。
でも、jsがわで呼び出ししていないとコンパイルに含んでくれないみたい。
強制で含められるのかどうか??
それさえやっていれば、これまでうまく行かなかったexposeとProvidePluginの併用は大丈夫みたい。

commonchunk

共通ライブラリ扱いらしい。。

requireをグローバルにする

デベロッパーコンソールから使いたくて、

window.require = function() {...}

でやってみたけどうまく行かず、、falseがかえってくる。
webpack-streamをつかっているからかも。

window['require'] = function(modules, callback) {
  var modulesToRequire = modules.forEach(function(module) {
    switch(module) {
      case 'immutable': return require('immutable');
      case 'jquery': return require('jquery');
    }
  });
  callback.apply(this, modulesToRequire);
}
require(['jquery', 'immutable'], function($, immutable) {
  // immutable and $ are defined here
});

browsersync

プロキシにしてほかサーバーを参照

「server」(ディレクトリ指定)の設定はプロキシとは共存しない

https://github.com/johnpapa/lite-server/issues/68
http://nantekottai.com/2015/03/23/browser-sync/

gulp.task(taskName, function() {
  browserSync.init({
    proxy: "hogehoge.com:80",
    //server: config.projectPath.public.root,
    startPath: "/sample.html",
    open: 'external'
  });
});

おもったこと

面白い
便利
モジュールの依存関係とか結構大変そうだなあ

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1