0

NodeJS を使用してビルドを行うプロジェクトを継承しました。何ヶ月もの間、すべてがうまくいっています。問題なく多数の製品版をビルドしました。

xlsx.js を入力します。

このパッケージを依存関係として追加して以来、Gulp ビルドは Windows では機能しますが、Ubuntu (ビルド マシン) では機能しないことがわかりました。Ubuntu でビルドを行う場合、require('fs') で RequireJS barfs を実行します。

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 を使用している場所を調べたところ、それは 1 か所だけでした。

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

そこにアラートを入れて、必要なコードを実行しました。アラートは呼び出されませんでした。

つまり、fs.js がロードされていても、アプリケーションのブラウザーで実行するときに実際には使用されないということです。

したがって、次のステップはおそらくライブラリのカスタム バージョン (フォーク) を作成し、その単一の関数を削除することです。私たちはそれを必要とせず、ビルドを壊すので、それを取り除くことができます.

これは理にかなっていますか?

ジェフ

于 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 に答える