获取未捕获的TypeError:使用Browserify与Nutritionix NodeJS客户端库时,fs.readdirSync不是一个函数

时间:2016-01-12 04:58:48

标签: javascript jquery node.js pug browserify

我正在尝试使用Node构建演示应用程序,并且在尝试使用Nutrionix NodeJS客户端库时,我一直收到未捕获的TypeError:fs.​​readdirSync不是函数错误({{ 3}})和Browserify。

我按照本教程https://github.com/nutritionix/nodejs-client-library一直到使用Browserify输出部分,但不是使用Underscore和为main.js提供的代码,而是使用使用Nutritionix NodeJS客户端库和main.js中的以下代码:

var NutritionixClient = require('nutritionix');

var nutritionix = new NutritionixClient({
    appId: '7c710fbd',
    appKey: 'a2f106128aa4b2ab81fd783fca5bf0ee'
    // debug: true, // defaults to false
});

我使用Jade的HTML如下:

doctype html
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    block content
    script(src='javascripts/nutri.js')
    script(src='javascripts/main.js')

我在命令行中使用以下内容来构建一个包含Nutritionix的新JavaScript文件:

browserify public/javascripts/main.js -o public/javascripts/nutri.js

当我在本地运行时,在控制台中,我得到未捕获的TypeError:fs.​​readdirSync不是nutri.js第465行中的函数,这是Browserify生成的文件。该行是以下函数中的第四行:

function readDirp(path, excludeList) {
    var lib = {};
    var expand = new Expander(path);
    var files = fs.readdirSync(path).map(expand);

    files.forEach(function(file){
        if (excluded(file.name, excludeList) === false) {
            lib[file.name.split('.').shift()] = require(file.location);
        }
    });

    return lib;
}

我不确定为什么我一直收到这个错误。当我浏览我在顶部链接的Browserify教程时,我可以使Browserified文件正常工作。如果我需要更多信息,请告知我们,我们非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

使用brfshttps://github.com/browserify/brfs

fs.readFileSync()和fs.readFile()静态资产browserify转换

此模块是browserify的插件,用于解析fs.readFileSync()调用的AST,以便您可以将文件内容内联到包中。

尽管此模块旨在与browserify一起使用,但关于它的专门针对浏览器的功能并不多,因此它通常在其他项目中也很有用。

答案 1 :(得分:0)

fs是一个用于文件系统操作的低级API,你不能像这样浏览它。您必须提供替换,例如:https://github.com/mafintosh/browserify-fs。由于您无法从浏览器访问客户端的文件系统,browserify-fs使用LevelDB来模拟文件系统。

答案 2 :(得分:0)

虽然这是意见之一......

首先,Nutrionix NodeJS Client Library设计用于Node.js运行时,而不是在浏览器(chrome,firefox和其他)运行时使用。

可能Client并不意味着browser,而是意味着who use Nutrionix by Node.js。所以,错误信息是正确的。

其次,ShanShan的建议在类似的情况下也是正确的,但在alejandroj1234的情况下,似乎不正确。 因为browserify-fs不支持readdirSync方法。

例如,我替换了fs模块和browserify-fs,但仍然出现错误消息。(它在lib-loader模块中使用,由nutrionix模块使用)

所以我的结论是,您使用browserify的方式是正确的,但它的库不适合以防万一。