Reactでソースコードを書きながらESLintで構文チェックするという開発スタイルに馴染めていないです。という内容なのですが…
今回はrequireで怒られました。
Unexpected require(). (global-require) at…
早速、調べてみると
require関数はモジュールの一番上のスコープで使うことを強制します
ESLintのEnforceという単語にただただ力強さを感じます…
つまり、外部モジュールをインポートしたりするときにモジュール同士の依存関係が分かりやすいほうがいいよね?
ソースコードのネストしている中でrequire()なんてしたら分かりづらいよね?
ということです。
…ごもっともです。これに従うと関数のスコープでのrequire()や条件分岐に応じたrequire()のスイッチングが出来ないのです。
以下に簡単なサンプルを示します。
//bad // calling require() inside of a function is not allowed function readFile(filename, callback) { var fs = require('fs'); fs.readFile(filename, callback) } //good // requiring a module and using it in a function is ok var fs = require('fs'); function readFile(filename, callback) { fs.readFile(filename, callback) }
//bad // conditional requires like this are also not allowed if (DEBUG) { require('debug'); } //good // you can use a ternary to determine which module to require var logger = DEBUG ? require('dev-logger') : require('logger');
極端な話、全部ソースコードの頭の方でrequireすればいいということですね。 でもメモリとか最適化されてないんじゃないかな…
http://eslint.org/docs/rules/global-require