0

我继承了一个使用 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 上找到。

非常非常感谢您的任何帮助...

谢谢,杰夫

4

2 回答 2

0

好的,我想通了,挖掘了一些相关的 StackOverflow 答案。

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

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

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

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

这意味着即使 fs.js 已加载,在浏览器中执行我们的应用程序时也不会实际使用它。

所以下一步可能是制作一个自定义版本的库(一个 fork)并删除该单个函数。我们不需要它,它破坏了我们的构建,所以我们可以摆脱它。

这有意义吗?

杰夫

于 2016-11-07T21:45:21.177 回答
0

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

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

这些天的继承:)

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

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

于 2016-11-07T21:49:05.170 回答