ES2015構文では、新しいインポート構文があります。オブジェクトにラップせずに、あるファイルから別のファイルにエクスポートされたすべてをインポートする方法を見つけようとしています。同じファイルで定義されているかのように利用できます。
それで、本質的に、これ:
// constants.js
const MYAPP_BAR = 'bar'
const MYAPP_FOO = 'foo'
// reducers.js
import * from './constants'
console.log(MYAPP_FOO)
少なくとも私のBabel/Webpackセットアップによれば、これは機能しません。この構文は無効です。
これは機能します(ただし、インポートするものが2つ以上必要な場合は長くて面倒です)。
// reducers.js
import { MYAPP_BAR, MYAPP_FOO } from './constants'
console.log(MYAPP_FOO)
これと同様に(ただし、constをオブジェクトにラップします):
// reducers.js
import * as consts from './constants'
console.log(consts.MYAPP_FOO)
最初のバリアントの構文はありますか、それとも名前ごとに各物をインポートするか、ラッパーオブジェクトを使用する必要がありますか?
最初のバリアントの構文はありますか、
いや.
または、それぞれを名前でインポートするか、ラッパーオブジェクトを使用する必要がありますか?
はい。
最初のバリアントのワイルドカードですべての変数をインポートすることはできません。異なるファイルに同じ名前の変数があると変数が衝突するためです。
//a.js
export const MY_VAR = 1;
//b.js
export const MY_VAR = 2;
//index.js
import * from './a.js';
import * from './b.js';
console.log(MY_VAR); // which value should be there?
ここではMY_VAR
の実際の値を解決できないため、この種のインポートは不可能です。
あなたの場合、インポートする値がたくさんある場合、それらをすべてオブジェクトとしてエクスポートする方が良いでしょう:
// reducers.js
import * as constants from './constants'
console.log(constants.MYAPP_FOO)
オブジェクトをインポートし、そのプロパティを反復処理してから、このようなevalを使用して定数を手動で生成できます
import constants from './constants.js'
for (const c in constants) {
eval(`const ${c} = ${constants[c]}`)
}
残念ながら、このソリューションはmy IDE=のインテリセンスでは動作しません。定数が実行中に動的に生成されるためです。しかし、一般に動作するはずです。
確かにあります。
Codegen.macroを使用するだけです
codegen
'const { ' + Object.keys(require('./path/to/file')).join(',') + '} = require("./path/to/file");
しかし、codegenによって生成された変数をインポートできないようです。 https://github.com/kentcdodds/babel-plugin-codegen/issues/1