Node.js

npm scripts のコマンドライン引数は sh で展開される

package.jsonに "scripts": { "lint": "eslint src/**/*.{js,jsx}" } と書いた場合、npm run lintやyarn run lintは、このコマンドをシェルを通して実行する。このときデフォルトではshが使われる。例えばmacOSだとshはbashなので、bashがsrc/**/*.{js,jsx}…

Mongooseのバージョニング

Mongooseは3からバージョニングという機能が入ったんだけどよくわかってなかったので調べたメモ。詳しくはここに書いてある。 http://aaronheckmann.tumblr.com/post/48943525537/mongoose-v3-part-1-versioningバージョニングを使うと何がいいかというと、…

Node.jsでロードパスをプログラム内から追加する

その昔はrequire.pathsというのがあってプログラム内からロードパスを設定できたんだけど、いつしかrequire.pathsは廃止され、NODE_PATHで設定するしかなくなった。でもNODE_PATHだとプログラムの中からロードパスを変更することができない。 // libにパスを…

Node.jsで標準入力がパイプかどうか判定する

例えば入力ファイルの行数をカウントするlinecount.jsっていうのがあったとして $ node linecount.js foo.txtっていう使い方と $ cat foo.txt | linecount.jsって両方に対応したいときNode.jsではprocess.stdin.isTTYを使えば判定できる。 if (process.stdin…

mochaでcontextが消されたけど戻ってた

僕がpull requestして取り込んでもらったcontextが消えて残念思ったんだけど https://github.com/visionmedia/mocha/commit/914c73654ecdc7c8c9431cfa48b13d59241b201d次の日にrevertされてたw https://github.com/visionmedia/mocha/commit/c44cf13773ab9b…

nodebrewのzsh補完書いた

補完関数書いた。 https://github.com/hokaccha/nodebrew/blob/master/completions/zsh/_nodebrewこれを$fpathがとおってるところに置くと動くはず。ホームディレクトリとかに補完関数を置きたいなら.zshrcに fpath=($HOME/.zsh_fun $fpath)とか書いて ~/.zs…

herokuでpackage.jsonから消したモジュールを削除する

buildpackで動かしてるNode.jsで、1回インストールされたnpmのモジュールがpackage.jsonから消えないのでbuildpackのスクリプトに npm prune を追記した。 https://github.com/hokaccha/heroku-buildpack-nodejs/commit/e942d5a91e24fe5850b9e2cbe072a4f2c6a…

nodebrew 0.5.0リリース(aliasを追加)

aliasとunaliasというコマンドを追加したnodebrew v0.5.0をリリースした。 https://github.com/hokaccha/nodebrew僕は常に最新版のnodeを使ってるわけじゃなくて一個固定のやつ(今はv0.6.6)を使ってて、必要な時に必要なバージョンをuseして、終わったらま…

path.existsがfsに移行

0.7.1からpath.existsはfs.existsになったらしい。existsSyncも同じく。後方互換でpath.existsもまだ使えるけどWarningでる。のでひとまずこうした。 var exists = fs.exists || path.exists;

connectのセッションミドルウェアのcookieのsecure属性について

SSLでCookie使う場合はsecure属性つけて非SSLの場合にはCookie送信しないようにするって仕組みがあるわけだけど、connectのsessionもその実装はされてる。 app.use(express.session({ secret: yourSecret, cookie: { secure: true } })); こんな感じ(コード…

expect.js 0.1.2でthrowExceptionがパワーアップした

expect.jsはかなりいいんだけどthrowExceptionでエラーオブジェクトのチェックができなくて微妙だったんでパッチ投げようかと思ったけどまさに自分が実装しようと思ってた機能が実装された。 var expect = require('expect.js'); var fn = function() { thro…

expect.jsとchai.expectのブラウザ対応

BDD Assert系のモジュールでchaiとexpect.jsを試した。機能はほぼ変わらないけどブラウザのサポートでけっこう差が出た。(ここでいう機能が変わらないってのはchai.expectと比較しての話し。chai.assertとかchai.shouldを考えると完全にchaiが高機能) http…

ファイルの変更を監視してコマンドを実行する

lesscでwatch的なことがしたかったんだけどできなくて、他にそういう系のツール探してみたけどいい感じのが見つからなかったんで適当に書いてみた。 https://gist.github.com/1632134 監視するファイルのリストとコマンド指定するだけ何でlessだけじゃなくて…

use strictの影響範囲

use strictは関数内に書けばその関数内だけで有効になるわけだけど、グローバルの領域に 'use strict'; ... とか書くと、人が書いた他のモジュールに影響出ちゃうんで (function() { 'use strict'; ... })(); こうするのが礼儀かと思ってたけど、やってみた…

nodebrew 0.4.2 Released

GitHub - hokaccha/nodebrew: Node.js version manager主にinstallとかuseのときのバージョンの指定の仕方がパワーアップ。 $ nodebrew install latest # latest version $ nodebrew install v0.6.x # v0.6 latest $ nodebrew install v0.6 # v0.6 latest $ …

nodebrew 0.3.2 Released

GitHub - hokaccha/nodebrew: Node.js version managerテストなしでメンテするのがつらくなってきたのでテスト書こうと思って、内部構造もテストしやすいようにかなり書き直したので自分的にはかなり大きいアップデートだけど使ってるほうはそんな変わらない…

LESSにextendを実装してみた

Less & Sass Advent calendar 2011の14日目です。LESSにextendを実装したので紹介。LESSはSassに比べて機能が少ないです。その中でもよくLESSにはextendがないのが困るというのを聞くので実装してみました。SassのextendについてはAdvent Calendarでも後ほど…

nodebrew 0.2.0 Released

つくってしばらく放置してたnodebrewを色々変更してみた。https://github.com/hokaccha/nodebrew主に wgetに対応(以前はcurlのみ) ワンライナーでインストールできるようにした ~/.nodebrew以下にnodebrew自信も置くようにした 環境変数(NODEBREW_ROOT)…

mochaの--globalsオプション

っていうのが新しく追加されてた。 // t1.js describe('mochaのテスト', function() { it('globalに定義', function() { foo = 'bar'; }); }); // t2.js var assert = require('assert'); describe('mochaのテスト', function() { it('fooがglobalに定義され…

mochaでフロントエンドのテスト

JavaScript Advent Calendar 2011 (フレームワークコース)6日目です。この前のエントリーで予告したとおりmochaを使ったフロントエンドでのテストについて書きます。ちなみにこの前エントリー書いたときは0.2.0だったんですけどすでに0.3.2です。必要なファ…

テストフレームワーク mocha

JavaScript Advent Calendar 2011 (Node.js/WebSocketsコース)3日目のhokacchaです。Node.jsのテストフレームワーク、mochaについて書きます。mochaはTJが新しく作り始めているテストフレームワークです。ドキュメントを見ればできることは大体書いてありま…

lessのエラーハンドリング

function foo() { var e = { name: 'Error', message: 'hoge' }; throw e; } foo(); node.jsでこれ実行すると node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: hogeこうなるわけなんだけど、エラーの箇所がさっぱ…

jsdomでメモリリークしてる場合はwindow.close()すべし

5000件くらい一気にスクレイピングしたいってのがあって、jsdomでスクレイピングしてたんだけど、メモリの使用量がふくれあがってすぐメモリリークしちゃってどうしようかと思ったんだけど、ググったら同じ人いっぱいいて、window.close()しろって書いてあっ…

node.jsで出力がTTYかどうか判断する

perlでいうと if (-t STDOUT) { say 'tty'; } else { say 'not tty'; } こういうことがやりたくてnodeだとこうするといけるみたい。 var tty = require('tty'); if (tty.isatty(1)) { console.log('tty'); } else { console.log('not tty'); } 1はSTDOUTね。…

node.jsでjson整形するワンライナー

curl http://api.twitter.com/1/statuses/user_timeline/hokaccha.json | node -e 'd = ""; process.stdin.resume(); process.stdin.on("data", function(c) { d+=c; }); process.stdin.on("end", function() { console.log(JSON.parse(d, null, " ")); });'…

nodebrewをgithubに移した

なんか意外にもいけそうな気がしたのでgithubに移した https://github.com/hokaccha/nodebrew機能追加とか改善点があればどしどしお願いします。

nodebrew書いてみた

Jxck's OutPut - Node.js の環境管理(version manager) について。 #nodejs_jpnvmってそんな難しいことしてないので自分が使いやすいのを書けばいいんじゃないかと思って書いてみた。 node package manager · GitHubperlだったらまあほとんどのサーバーに入…

expressのルーティング

express2.5からexpressコマンドでプロジェクトつくると./routesってディレクトリにルーティングが書かれるようになってる。規模が大きくなるほど煩雑になるので、ルーティングのファイルは分けたほうがいいと思うけど、これでも個人的にはやや微妙。 var exp…

Travis CIでNodeのテスト

やってみた。Travice CIにログインしたら自分のGithubのプロジェクトが一覧で出るのでCIしたいプロジェクトをONにする。んでgithubのプロジェクトに.travis.ymlおいてpushするだけ。超簡単。 http://travis-ci.org/#!/hokaccha/node-chain-tiny.travis.ymlは…

chain-tinyにwaitとeach(Parallel)追加

ほしかったので追加。eachはforEachのObject版。waitはjsdeferredのwaitとほぼ同じ(引数はms)こんな感じ。 var chain = require('chain-tiny'); // each chain(function(next) { next(null, { foo: 'bar', hoge: 'fuga'}); }) .each(function(key, val, ne…