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
有关
我继承了一个使用 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
有关