2012-03-01 9 views
5

से डी 3 चलाने के लिए चाहता हूं मैं कमांड लाइन से कुछ डी 3 कोड निष्पादित करना चाहता हूं। शुरू में मैं सिर्फ तरह कुछ करने की कोशिश की:मैं एक केकफाइल

task 'data', 'Build some data with d3', -> 
     d3 = require('lib/d3.v2') 
     console.log "d3 version = "+ d3.version 

लेकिन यह काम नहीं किया। मुझे इस तरह की त्रुटियां मिलीं:

node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
ReferenceError: CSSStyleDeclaration is not defined 
    at /Users/mydir/Documents/classes/middleclass/app/lib/d3.min.js:1:21272 
    at Object.<anonymous> (/Users/mydir/Documents/classes/middleclass/app/lib/d3.min.js:2:25395) 
    at Module._compile (module.js:432:26) 
    at Object..js (module.js:450:10) 
    at Module.load (module.js:351:31) 
    at Function._load (module.js:310:12) 
    at Module.require (module.js:357:17) 
    at require (module.js:368:17) 
    at Object.action (/Users/mydir/Documents/classes/middleclass/Cakefile:22:10) 
    at /usr/local/lib/node_modules/coffee-script/lib/coffee-script/cake.js:39:26 

तो ... मुझे लगा कि यह अपवाद मुझे बता रहा था कि मुझे ब्राउज़र के अंदर डी 3 निष्पादित करने की आवश्यकता है। मैंने इसे दो अलग-अलग तरीकों से करने की कोशिश की। असल में हालांकि, मैंने सोचा कि अगर मैंने अभी फैंटोम को निकाल दिया है तो शायद मैं ऐसा करने में सक्षम हूं जो मैं करना चाहता था।

task 'data2', 'Build some data with d3', -> 
    hem = spawn 'hem', ['server'] 
    phantom = require('phantom') 
    phantom.create (ph) -> 
    ph.createPage (page) -> 
     page.open 'http://localhost:9294/sandbox.html', (status) -> 
     page.evaluate (-> window), (window) -> 
      require = window.require 
      require('lib/d3.v2') 
      console.log("d3 version = "+ d3.version) 
      ph.exit() 
      hem.kill() 

जब मैं यह तरीका अपनाते हैं, हालांकि, मैं हमेशा ऊपर इस तरह अपवाद हो रही अंत: यहाँ मेरी Cakefile था

TypeError: object is not a function 
    at Object.CALL_NON_FUNCTION (native) 
    at Object.<anonymous> (/Users/mydir/Documents/classes/middleclass/Cakefile:52:13) 
    at Object.<anonymous> (/Users/mydir/Documents/classes/middleclass/node_modules/phantom/node_modules/dnode-protocol/index.js:274:16) 
    at apply (/Users/mydir/Documents/classes/middleclass/node_modules/phantom/node_modules/dnode-protocol/index.js:143:17) 
    at EventEmitter.handle (/Users/mydir/Documents/classes/middleclass/node_modules/phantom/node_modules/dnode-protocol/index.js:120:13) 
    at /Users/mydir/Documents/classes/middleclass/node_modules/phantom/node_modules/dnode-protocol/index.js:81:20 
    at EventEmitter.<anonymous> (/Users/mydir/Documents/classes/middleclass/node_modules/phantom/node_modules/dnode/node_modules/lazy/lazy.js:62:13) 
    at EventEmitter.<anonymous> (/Users/mydir/Documents/classes/middleclass/node_modules/phantom/node_modules/dnode/node_modules/lazy/lazy.js:46:19) 
    at EventEmitter.emit (events.js:67:17) 
    at EventEmitter.<anonymous> (/Users/mydir/Documents/classes/middleclass/node_modules/phantom/node_modules/dnode/node_modules/lazy/lazy.js:46:39) 

क्या मैं गलत कर रहा हूँ ??


धन्यवाद mbostock को मैं अगले कार्य हो गया है:

मेरे package.json:

{ 
    "name": "app", 
    "version": "0.0.1", 
    "dependencies": { 
     "d3": "~2.8.0", 
     "jsdom": "~0.2.13" 
    } 
} 

मेरे Cakefile:

task 'd3', 'Do something with d3', -> 
    jsdom = require('jsdom') 
    jsdom.env({ 
    html: 'public/sandbox.html' 
    done: (errors,window) -> 
     require('d3/index.js') 
     console.log("d3 version = "+ d3.version) 
    }) 
+0

ऐसा लगता है कि आप आपकी समस्या हल हो लग रहा है। मुझे व्यक्तिगत रूप से एक ही त्रुटि मिली, और इसे 'निर्यात NODE_PATH =/usr/local/lib/node_modules' –

उत्तर

3

देखें डी 3 के package.json। अधिक विशेष रूप से, जिस फ़ाइल को आप नोड या इसी तरह के वातावरण के अंदर चलते समय आवश्यक करना चाहते हैं वह d3.v2.js की बजाय index.js है; इस फ़ाइल में कुछ विशेष पैच हैं जो require ऑपरेटर के साथ डी 3 संगत बनाते हैं।

खुद के लिए इसे आज़माने के लिए, डी 3 भंडार को cd, एक इंटरैक्टिव खोल बनाने के लिए node चलाने के लिए, और फिर कहते हैं कि

var d3 = require("./"); 

या, यदि आप अपने खुद के प्रोजेक्ट फ़ोल्डर में हैं, अगर आप ' node_modules में डी 3 स्थापित किया है/d3 के माध्यम से NPM (npm install d3), तो आप कह सकते हैं:

var d3 = require("d3"); 
+0

के साथ ठीक किया गया मेरे छोटे पुराने प्रश्न का उत्तर देने के लिए धन्यवाद - मैं आज इसे आजमाउंगा। और डी 3 लेखक से कम नहीं! – dsummersl

+0

बस सोचा कि मैं पूछने के लिए पालन करूँगा ... क्योंकि लेखक इस धागे पर है ... मैंने 'npm install d3' की कोशिश की, और जबकि var d3 = आवश्यकता ('d3'); नोड कंसोल में मुझे 'अपरिभाषित' देता है लेकिन मैं d3.version कर सकता हूं और इसे प्राप्त कर सकता हूं, इसे app.js में डालकर मुझे देता है: TypeError: अपरिभाषित संपत्ति 'बीएसओएन' नहीं पढ़ सकता ... क्या मुझे कुछ याद आ रही है? – pland

+0

@pland देखें कंसोल में http://stackoverflow.com/questions/9948350 'var d3 = आवश्यकता (" d3 ");' प्रिंट "अपरिभाषित" क्योंकि अभिव्यक्ति अपरिभाषित करने का मूल्यांकन करती है; भ्रमित, इसका मतलब यह नहीं है कि 'd3' चर अपरिभाषित है! तथ्य यह है कि आप 'd3.version' प्रिंट कर सकते हैं यह दर्शाता है कि पैकेज सही ढंग से लोड किया गया है। – mbostock

संबंधित मुद्दे