Gulp/NodeJS:Require('fs') 在 Ubuntu 上失败,但在 Windows 上有效

Gulp/NodeJS: Require('fs') fails on Ubuntu, but works on Windows

我继承了一个使用 NodeJS 构建的项目。几个月来我们一切正常。我们已经毫无问题地构建了许多生产版本。

输入xlsx.js.

自从将此包添加为依赖项后,我们发现我们的 Gulp 构建可以在 Windows 上运行,但不能在 Ubuntu(这是我们的构建机器)上运行。当我们在 Ubuntu 上构建时,RequireJS barfs on require('fs'):

johnny@ubun-16:~/dev/eVGM-JavaScript-Client$ node --version
v4.6.1
johnny@ubun-16:~/dev/eVGM-JavaScript-Client$ gulp test
[15:19:35] Using gulpfile ~/dev/eVGM-JavaScript-Client/gulpfile.js
[15:19:35] Starting 'test'...
[15:19:35] Starting 'run-tests'...
07 11 2016 15:19:40.236:WARN [karma]: No captured browser, open http://localhost:9876/
07 11 2016 15:19:40.298:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
07 11 2016 15:19:40.308:INFO [launcher]: Starting browser PhantomJS
07 11 2016 15:19:41.421:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket Hq69p1CiIhcsCDOGAAAA with id 72071968
07 11 2016 15:19:41.596:WARN [web-server]: 404: /base/jspm_packages/system-polyfills.js
07 11 2016 15:19:43.457:WARN [web-server]: 404: /base/fs.js
PhantomJS 2.1.1 (Linux 0.0.0) ERROR
  Error: (SystemJS) XHR error (404 Not Found) loading /home/johnny/dev/eVGM-JavaScript-Client/fs.js
Error loading /home/johnny/dev/eVGM-JavaScript-Client/fs.js as "fs" from /home/johnny/dev/eVGM-JavaScript-Client/jspm_packages/github/sheetjs/js-xlsx@0.8.0/xlsx.js

PhantomJS 2.1.1 (Linux 0.0.0): Executed 0 of 0 ERROR (2.27 secs / 0 secs)

据我所知,'fs' 是 NodeJS 的内置包。 (对吗?)它 应该 在那里。但它不是根据 Gulp.

更奇怪的是,如果我键入 Node 并在 Node 提示符下键入 "require('fs')",我会收到大量文本,告诉我 Node 正在找到包 A-OK。

可能是 Gulp 问题。可能是 Ubuntu 的问题。也许这是杰夫的白痴问题。无论出于何种原因,我无法让我们的构建从 Gulp 中找到 fs,并且只能在 Ubuntu.

上找到 fs

非常非常感谢收到任何帮助...

谢谢, 杰夫

好的,我想通了,仔细研究了一些相关的 Whosebug 答案。

require('fs') 仅适用于服务器应用程序。毕竟,浏览器的文件系统是什么?在那种情况下它没有意义。如果我一直在动脑子,我就会意识到这一点。

所以我查看了图书馆在哪里使用 fs,它只在一个地方:

var fs;
function readFileSync(filename, options) {
  if(fs === undefined) fs = require('fs');
  return parse(fs.readFileSync(filename), options);
}

我在那里设置了一个警报和 运行 我们需要的代码;未调用警报。

这意味着即使 fs.js 已 加载 它实际上并没有 使用 在我们的应用程序的浏览器中执行时.

所以下一步可能是制作一个自定义版本的库(一个分支)并删除那个单一的功能。我们不需要它,它会破坏我们的构建,所以我们可以摆脱它。

这有意义吗?

杰夫

不要分叉,这个库是为客户端和服务器端制作的,找到这个是正常的。

I've inherited a project that does its build using NodeJS. Everything's been working fine for us for months. We've built a number of production releases with no problem.

最近的继承:)

所以如果我错了请纠正我,这是一个 javascript 客户端项目构建 gulp (使用节点)。 您添加了 xslx,并且您的测试在 windows 上运行良好,但在 ubuntu.

上运行良好

我第一个怀疑是phantomJS。检查你的版本。可能与https://github.com/SheetJS/js-xlsx/issues/184

有关