javascript – Nodejs Browserify Uncaught TypeError:exists不是函数

我是Browserify的新手并尝试以下方法:

我创建了一个节点服务器并尝试在浏览器上运行一个名为“openbci”的包.

所以我有以下文件结构:

Myapp
-...
-public
--app.js
--index.html
--openBCI.js
--...
--javascript
---openBCI
----bundle.js
---...
-node_modules
--openbci
---openBCIBoard.js
--browserify
--...

我的app.js文件设置服务器以提供公用文件夹

// app.js
var express = require('express');
var app = express();
app.use(express.static('public'));
app.listen(myPort);

然后我创建了以下openBCI.js

// openBCI.js
var OpenBCIBoard = require('openbci').OpenBCIBoard;
exports.OpenBCIBoard = OpenBCIBoard;

最后启动了browserify命令:

$browserify public/openBCI.js > public/javascript/openBCI/bundle.js

但是在我的index.html文件中调用后,我得到了一个Uncaught TypeError:exists不是Function.getRoot中的函数:

exports.getRoot = function getRoot (file) {
  var dir = dirname(file)
    , prev
  while (true) {
    if (dir === '.') {
      // Avoids an infinite loop in rare cases, like the REPL
      dir = process.cwd()
    }
    **if (exists(join(dir, 'package.json')) || exists(join(dir, 'node_modules'))) {**
      // Found the 'package.json' file or 'node_modules' dir; we're done
      return dir
    }
    if (prev === dir) {
      // Got to the top
      throw new Error('Could not find module root given file: "' + file
                    + '". Do you have a `package.json` file? ')
    }
    // Try the parent dir next
    prev = dir
    dir = join(dir, '..')
  }
}

它似乎无法找到模块的原始路径.
你能告诉我改变什么吗?或者,如果我完全理解browserify如何工作? 🙂

最佳答案 我注意到一些关于代码看似奇怪的事情.

>存在在JavaScript或节点中未定义.它似乎是fs.exists的别名 – 是吗?

如果是这样,则不推荐使用fs.exists.根据文档,您可以使用fs.stat或fs.access实现相同的效果.但请注意,您应该提供回调(最好)或使用这些方法的同步版本.

>如果您尝试在浏览器中使用文件系统工具,则会遇到问题,因为您试图从浏览器访问服务器的文件系统.有一个插件,browserify-fs,在浏览器中为您提供相当于fs的插件.但是,这似乎访问了浏览器的本地IndexedDB,而不是服务器上的存储.

我建议运行依赖服务器端服务器端文件的代码,而不是浏览器.

点赞