jsdom実行エラー

865 views
Skip to first unread message

saladdays

unread,
Dec 20, 2011, 12:12:00 PM12/20/11
to node...@googlegroups.com
初めまして。saladdaysと申します。よろしくお願い致します。

jsdomをnpmでインストールし、jsdomのGitHub [ https://github.com/tmpvar/jsdom ] にあるサンプル文を実行しようとしたところ「Error: Cannot find module 'jsdom'」と出てしまいました。
$npm ls ではもちろんきちんと表示がされていますし、問題ないとは思うのですが。。

バージョンは node.js - 0.6.6 / jsdom - 0.2.10 です。

正直なところサーバーサイド言語を学習すること自体が初めてなためとんちんかんなお伺いをしてしまっていたら申し訳ありません。
ご教授頂きたく何卒宜しくお願い致します。

block.rxc...@gmail.com

unread,
Dec 20, 2011, 6:27:44 PM12/20/11
to node...@googlegroups.com
Jxck です。

書かれているとおり、 require('jsdom') したファイルから、モジュールが見えてないんだと思いますが、コード見ないと何とも言えません。

ソース片(公開出来ないなら、再現する別のもの)でもいいんで、見せていただけるとわかると思います。あとディレクトリ構成(treeした結果)も出来れば教えてください。

Jxck

unread,
Dec 20, 2011, 6:53:49 PM12/20/11
to node...@googlegroups.com
Jxck です。

もしかしてなんですが、

https://github.com/tmpvar/jsdom/blob/master/example/ender/run.js

このへんのサンプルのソースをそのままコピーして実行してるでしょうか?

だとしたら、先頭行の相対パス解決はできてない可能性があります。

require('../../lib/jsdom')を
require('jsdom')

に変えて実行して見て下さい。

Yu Uno

unread,
Dec 21, 2011, 9:13:21 AM12/21/11
to node...@googlegroups.com
Jxck様
早速のご返信ありがとうございます。

実行しましたのはこちらのソースです。

// Count all of the links from the nodejs build page
var jsdom = require("jsdom");

jsdom.env("http://nodejs.org/dist/", [
'http://code.jquery.com/jquery-1.5.min.js'
],
function(errors, window) {
console.log("there have been", window.$("a").length, "nodejs releases!");
});


また、ツリーはnpmのものでよろしかったでしょうか。
Macのnode.jsを利用しておりますので、ユーザーディレクトリの下に
naveにて管理しております。

/Users/saladdays76/nave
├── e...@0.6.1 extraneous
├─┬ exp...@2.5.2 extraneous
│ ├─┬ con...@1.8.3
│ │ └── formi...@1.0.8
│ ├── mi...@1.2.4
│ ├── mkd...@0.0.7
│ └── q...@0.4.0
├─┬ js...@0.2.10 extraneous
│ ├── conte...@0.0.7
│ ├── cs...@0.2.1
│ ├── htmlp...@1.7.3
│ └── req...@2.2.9
├── node...@0.1.9 extraneous
├─┬ node-in...@0.1.10 extraneous
│ └── pape...@0.0.3
└─┬ sock...@0.8.7 extraneous
├── polic...@0.0.4
├── re...@0.6.7
└─┬ socket.i...@0.8.7
├── ugli...@1.0.6
├── websocke...@1.0.0
└── xmlhttp...@1.2.2


ご指摘のとおりjsdomのパスが誤っているものと思うのですが、
npmにてインストールされたjsdomは、いったいどこにパスを通せば良いかもわからず。。
ご教授頂ければ幸いでございます。

saladdays

unread,
Dec 21, 2011, 9:22:37 AM12/21/11
to nodejs_jp
Jxck様

先ほど投稿した内容で、
jsファイルをユーザーディレクトリの一階層下に置き、
jsdomのパスを ../nave/node_modules/jsdom としたところ実行ができました。

お騒がせしてしまい申し訳ありません。

ちなみによくサンプルファイルでは
require でモジュールを呼び出す際に、
モジュール名のみを入れていることが多いのですが
あれはどのようにして実行されていうのでしょうか。

私の環境でもexpresやsocket.io
モジュール名のみで実行できております。

後学のため教えて頂けますでしょうか。
お手すきの際で構いません。


宜しくお願い致します。


On 12月21日, 午後11:13, Yu Uno <saladday...@gmail.com> wrote:
> Jxck様
> 早速のご返信ありがとうございます。
>
> 実行しましたのはこちらのソースです。
>
> // Count all of the links from the nodejs build page
> var jsdom = require("jsdom");
>
> jsdom.env("http://nodejs.org/dist/", [
> 'http://code.jquery.com/jquery-1.5.min.js'
> ],
> function(errors, window) {
> console.log("there have been", window.$("a").length, "nodejs releases!");
>
> });
>
> また、ツリーはnpmのものでよろしかったでしょうか。
> Macのnode.jsを利用しておりますので、ユーザーディレクトリの下に
> naveにて管理しております。
>
> /Users/saladdays76/nave
> ├── e...@0.6.1 extraneous
> ├─┬ expr...@2.5.2 extraneous
> │ ├─┬ conn...@1.8.3
> │ │ └── formida...@1.0.8
> │ ├── m...@1.2.4
> │ ├── mkd...@0.0.7
> │ └── q...@0.4.0
> ├─┬ js...@0.2.10 extraneous
> │ ├── context...@0.0.7
> │ ├── cs...@0.2.1
> │ ├── htmlpar...@1.7.3
> │ └── requ...@2.2.9
> ├── node-...@0.1.9 extraneous
> ├─┬ node-inspec...@0.1.10 extraneous
> │ └── paper...@0.0.3
> └─┬ socket...@0.8.7 extraneous
> ├── policyf...@0.0.4
> ├── re...@0.6.7
> └─┬ socket.io-cli...@0.8.7
> ├── uglify...@1.0.6
> ├── websocket-cli...@1.0.0
> └── xmlhttprequ...@1.2.2

Akitoshi Manabe

unread,
Dec 21, 2011, 10:12:06 AM12/21/11
to node...@googlegroups.com
はじめまして、眞鍋と申します。

モジュールの読み込み順序はドキュメントに「明記」されてます。
http://nodejs.org/docs/v0.6.6/api/modules.html#core_Modules
http://nodejs.jp/nodejs.org_ja/docs/v0.6/api/modules.html#core_Modules (和訳)

優先順位は次の通り。
1)コアモジュール(コンパイル済み)
2)ファイルモジュール(パス指定のあるもの、拡張子によって js かコンパイル済みかを判別)
3)node_modules 配備済みモジュール

nodejs.jp ではオフィシャルが登場してあまり期間をあけずに最新版の和訳を公開してくださってますので、
一読しておくと、より理解を深められますよ。


2011年12月21日23:22 saladdays <salad...@gmail.com>:

Koichi Kobayashi

unread,
Dec 22, 2011, 4:00:24 AM12/22/11
to node...@googlegroups.com
小林 (koichik) です.

> naveにて管理しております。
>
> /Users/saladdays76/nave

nave の場合、

/Users/saladdays76/.nave/installed/0.6.6/lib

のようなパス (の下の node_modules ディレクトリ) にインストール
されませんか?
いずれにせよ、これは -g を付けて npm install したんですよね?
だとすると、サンプルを動かしているディレクトリで

npm ln jsdom

などとする (そのディレクトリに node_modules ディレクトリが
作成されます) か、NODE_PATH 環境変数に

/Users/saladdays76/nave/node_modules

を加える必要があります。

NODE_PATH=/Users/saladdays76/nave/node_modules node xxx.js

Date: Wed, 21 Dec 2011 23:13:21 +0900
From: Yu Uno <salad...@gmail.com>
Subject: Re: [nodejs_jp:503] jsdom実行エラー

--
{
name: "Koichi Kobayashi",
mail: "koi...@improvement.jp",
blog: "http://d.hatena.ne.jp/koichik/",
twitter: "@koichik"
}

Jxck

unread,
Dec 23, 2011, 8:41:47 AM12/23/11
to node...@googlegroups.com
遅くなりました。

npm モジュール使った基本の開発の流れは

> mkdir project
> cd project
> npm install jsdom

です。

これで、 node_modules の中に jsdom はインストールされます。

$ tree
.
└── node_modules
    └── jsdom


node_modules に入ってるモジュールについては、パスが通ってるので
例えば project/index.js の中で

var jsdom = require('jsdom');

できます。
試してみてください。

Yu Uno

unread,
Dec 25, 2011, 9:07:42 AM12/25/11
to node...@googlegroups.com
眞鍋様、小林様、Jxck様

saladdaysです。


お返事が遅れ申し訳ございません。
ようやくモジュールの読み込み指定の方法が理解できました。

結果、今回は小林様に頂きました
NODE_PATHにnaveのnode_moduleディレクトリを追加することにより、
無事 require('jsdom') でjsdomモジュールの呼び出しができるようになりました。

ありがとうございました。


未熟者ゆえまたお世話になることもあるかもしれませんが、
引き続き何卒宜しくお願い致します。

Reply all
Reply to author
Forward
0 new messages