2016-11-07 39 views
0

Я унаследовал проект, который выполняет свою сборку с использованием NodeJS. Все работает отлично для нас в течение нескольких месяцев. Мы создали ряд выпусков продукции без проблем.Gulp/NodeJS: Требовать ('fs') не удается на Ubuntu, но работает на Windows

Ввести xlsx.js.

С момента добавления этого пакета в качестве зависимости мы обнаружили, что наша сборка Gulp работает в Windows, но не на Ubuntu (которая является нашей машиной сборки). Когда мы делаем сборку на Ubuntu, RequireJS barfs на требуют («фс»):

[email protected]:~/dev/eVGM-JavaScript-Client$ node --version 
v4.6.1 
[email protected]:~/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/[email protected]/xlsx.js 

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

Из того, что я могу сказать, «фс» встроенный в пакет для NodeJS. (правильно?) И это должно быть быть там. Тем не менее, это не согласно Gulp.

Чтобы сделать вещи еще более странными, если я набираю Node и в приглашении узла, введите «require ('fs')», я получаю поток текста, который сообщает мне, что Node находит пакет A-OK.

Возможно, это проблема с глотком. Возможно, это проблема Ubuntu. Возможно, это проблема Джеффа идиот. По какой-то причине я не могу заставить наш сборник найти fs из Gulp и только на Ubuntu.

Любая помощь очень, очень благодарностью ...

Спасибо, Джефф

+0

Может ли это быть какой-то проблемой пути? Другими словами, fs.js находится в каком-то волшебном каталоге NodeJS, о котором знает наша установка Windows, но наша установка Ubuntu не делает этого? –

ответ

0

Хорошо, я понял это, копаться в некоторых связанных StackOverflow ответы.

require ('fs') предназначен только для использования в серверном приложении. В конце концов, что такое файловая система браузера? В этом контексте нет смысла. Если бы я использовал свой мозг, я бы понял это.

Так что я смотрел на то, где библиотека использует фс, и только в одном месте:

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

я застрял предупреждение там и побежал код нам нужно; предупреждение не было вызвано.

Это означает, что даже если fs.js является загружен это на самом деле не используется при выполнении в браузере для нашего приложения.

Итак, следующим шагом, вероятно, является создание пользовательской версии библиотеки (вилки) и удаление этой единственной функции. Нам это не нужно, и это разрушает нашу сборку, поэтому мы можем избавиться от нее.

Имеет ли это смысл?

Джефф

0

Не вилка, библиотека сделана как для клиентской и серверной стороны, это нормально, чтобы найти это.

Я унаследовал проект, который выполняет свою сборку с использованием NodeJS. Все работает отлично для нас в течение нескольких месяцев. Мы создали номер серийных выпусков без проблем.

Наследование в эти дни :)

Так поправьте меня, если я ошибаюсь, это Java-проект стороны клиента строить с глотком (используя узел). Вы добавили xslx, и ваш тест отлично работает на окнах, но не на ubuntu.

Мой первый подозреваемый - фантом JS. Проверьте свою версию. Он может быть связан с https://github.com/SheetJS/js-xlsx/issues/184

+0

Интересная мысль! Да, у меня есть проект на стороне клиента с Gulp, и поведение точно так, как вы говорите. Я проверю эту ссылку! Спасибо! –

+0

О, но подождите. Я только что вспомнил: я попробовал тесты, используя Firefox в Карме, и столкнулся с той же проблемой. Я не помню свой филогенез браузера, поэтому я полагаю, что они могут пострадать от одной и той же проблемы ... –

+0

Возможно, вам также не хватает прокладок, таких как https://github.com/jvilk/BrowserFS или jszip –