2013-04-03 94 views
-1

我正在嘗試構建一個簡單的cakefile來執行我正在處理的節點項目的構建任務。繼this gist from github,我已經成功地引發以下基本代號:fs在cakefile中未定義

CoffeeScript = require 'coffee-script' 
{exec} = require 'child_process' 
fs = require 'fs' 
web_build_path = 'bin/web' 


task 'build', 'build server-side project code and output to bin dir', -> 
    makeUnrevisionedDirs() 

    #snip other methods... 

makeUnrevisionedDirs =() -> 
    console.log(": adding unrevisioned directories...") 
    if not fs.existsSync(web_build_path) 
     console.log(":: adding #{web_build_path} dir") 
     fs.mkdirSync(web_build_path) 
    if not fs.existsSync('logs') 
     console.log(":: adding logs dir") 
     fs.mkdirSync('logs') 
    if not fs.existsSync('bin') 
     console.log(":: adding bin dir") 
     fs.mkdirSync('bin') 

並得到下面的錯誤,好像fs從未要求:

TypeError: Cannot call method 'existsSync' of undefined 
    at makeUnrevisionedDirs (C:\fms\Cakefile:25:9, <js>:22:13) 
    at Object.makeUnrevisionedDirs [as action] (C:\fms\Cakefile:7:2, <js>:11:5) 
    at helpers.extend.invoke (C:\Users\Mike\AppData\Roaming\npm\node_modules\coffe 
e-script\lib\coffee-script\cake.js:45:26) 
    at Object.exports.run (C:\Users\Mike\AppData\Roaming\npm\node_modules\coffee-s 
cript\lib\coffee-script\cake.js:72:21) 
    at Object.<anonymous> (C:\Users\Mike\AppData\Roaming\npm\node_modules\coffee-s 
cript\bin\cake:7:38) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:903:3 

爲什麼fs這裏未定義?

+0

有沒有這方面的運氣?我正在得到類似的行爲。出於某種原因,fs是未定義的。我有var fs = require('fs');然後嘗試console.log(fs),但它不在那裏。嘗試聲明沒有var或甚至顯式爲global.fs = require('fs'),仍然是未定義的。 – 2013-06-03 00:10:04

回答

1

我有這個問題,發現我運行的是一個真正舊版本的節點(0.6) - 你的需求是安靜地失敗,FS必須是一個不存在的新包。

在我安裝了N包裝結束後,升級的節點,一切都很好

How can I update Node.js and npm to the next versions?

(向右走答案的底部,我用了3個命令)

注意我還運行了Z shell,並且需要告訴shell在找到更新版本的節點之前使用rehash命令重新編輯它的可執行文件列表。