2013-04-03 31 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命令重新编辑它的可执行文件列表。