2015年6月24日水曜日

nodejsで(?)また罠にはまったでござるの巻

https://laracasts.com/series/laravel-5-fundamentals/episodes/19

Laravelの勉強で
laracastsの一番基礎と思われるlaravel-5-fundamentalsに沿って、
やっていたのですが、
Assetsを使う章にいたって、

「gulpfile.jsをちょっといじって、gulpしてみると、ほら!」

とあたかも簡単になっているところで、
nodejsのgulpというやつを実行しようとしたのですよ。

ところが、途中でコマンドを中断してしまったのか、
何度gulpコマンドを実行しても、

$ gulp
/Users/kistsutsuki/Code/Laravel/node_modules/laravel-elixir/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_readable.js:562
});
 ^
SyntaxError: Unexpected token )
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/Users/kistsutsuki/Code/Laravel/node_modules/laravel-elixir/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/node_modules/readable-stream/readable.js:1:90)
    at Module._compile (module.js:460:26)

    at Object.Module._extensions..js (module.js:478:10)

色々調べてみて、
そもそもHomesteadでやっている場合はVM側でなくてホストマシンのほうでnpmを入れていきなさい、とかそういう情報は見つかって、確かにそうすると

gulp@3.9.0 node_modules/gulp
├── pretty-hrtime@1.0.0
├── interpret@0.6.2
├── deprecated@0.0.1
├── archy@1.0.0
├── minimist@1.1.1
├── tildify@1.1.0 (os-homedir@1.0.0)
├── semver@4.3.6
├── chalk@1.0.0 (escape-string-regexp@1.0.3, ansi-styles@2.0.1, supports-color@1.3.1, strip-ansi@2.0.1, has-ansi@1.0.3)
├── orchestrator@0.3.7 (stream-consume@0.1.0, sequencify@0.0.7, end-of-stream@0.1.5)
├── v8flags@2.0.7 (user-home@1.1.1)
├── gulp-util@3.0.5 (array-differ@1.0.0, array-uniq@1.0.2, lodash._reescape@3.0.0, beeper@1.1.0, lodash._reevaluate@3.0.0, object-assign@2.1.1, lodash._reinterpolate@3.0.0, replace-ext@0.0.1, through2@0.6.5, vinyl@0.4.6, multipipe@0.1.2, lodash.template@3.6.1, dateformat@1.0.11)
├── liftoff@2.1.0 (extend@2.0.1, rechoir@0.6.1, flagged-respawn@0.3.1, resolve@1.1.6, findup-sync@0.2.1)
└── vinyl-fs@0.3.13 (graceful-fs@3.0.8, strip-bom@1.0.0, defaults@1.0.2, mkdirp@0.5.1, through2@0.6.5, vinyl@0.4.6, glob-stream@3.1.18, glob-watcher@0.0.6)

この出力はでてくるようになるのだけど、
そのあとにgulpしようとしてつまづく。

よくよく前をみてみたら、unmet dependency なるものがあるのに気がつく。

npm WARN unmet dependency /Users/kitsutsuki/Code/Laravel/node_modules/laravel-elixir/node_modules/gulp-notify requires gulp-util@'~2.2.12' but will load
npm WARN unmet dependency /Users/kitstutsuki/Code/Laravel/node_modules/laravel-elixir/node_modules/gulp-util,
:
:

stackoverflowでずばりなテーマの質問がありました。

これがでてきたら、問題があった階層のひとつ上のモジュールを手動でインストールするように

との答えに一番票が寄せられていたので、

npm install laravel-elixir --save-dev

いい感じで、結果のdependencyのツリー表示が出る。

npm install gulp --save-dev

できる。
そしてもう一度

gulp

したら、あらふしぎ。

[01:27:51] Using gulpfile ~/Code/Laravel/gulpfile.js
[01:27:51] Starting 'default'...
[01:27:51] Starting 'less'...
[01:27:51] Running Less: resources/assets/less/app.less
[01:27:52] Finished 'default' after 716 ms
[01:27:54] gulp-notify: [Laravel Elixir] Less Compiled!
[01:27:54] Finished 'less' after 2.73 s

たぶん最初のnpm install gulpのときに何か時間がかかっている気がして、
途中でCtrl+Cしてしまったのが、何かを壊してしまったのかもしれないです…

こまぎれの時間で、コマンド打ちながら勉強しようとすると、
こういうところでつまづいて結局こういう
不毛な調べ物をする羽目になったりするのですね。

ああ。

- by Mizuk