戻り値となるオブジェクトを持つモジュール(./my-module.js
)があるとします:
let values = { a: 1, b: 2, c: 3 }
// "export values" results in SyntaxError: Unexpected token
したがって、次のようにインポートできます。
import {a} from './my-module' // a === 1
import * as myModule from './my-module' // myModule.a === 1
私が見つけた唯一の方法は、エクスポートをハードコーディングすることです:
export let a = values.a
export let b = values.b
export let c = values.c
// or:
export let {a, b, c} = values
動的ではありません。
オブジェクトからすべての値をエクスポートすることは可能ですか?
そうではないようです。 ECMAScript 6モジュール:最終構文 :からの引用
疑問に思われるかもしれません-単純にデフォルトのオブジェクト(CommonJSなど)をエクスポートできるのに、なぜ名前付きエクスポートが必要なのでしょうか?答えは、オブジェクトを介して静的構造を強制することはできず、関連する利点をすべて失うことはできないということです(次のセクションで説明します)。
これは本当にお勧めできません 溶液 回避策はありますが、機能します。オブジェクトをエクスポートするのではなく、named exports各メンバーを使用します。別のファイルで、最初のモジュールの名前付きエクスポートをオブジェクトにインポートし、そのオブジェクトをデフォルトとしてエクスポートします。また、export * from './file1';
を使用して、最初のモジュールからすべての名前付きエクスポートをエクスポートします
values/value.js
let a = 1;
let b = 2;
let c = 3;
export {a, b, c};
values/index.js
import * as values from './values';
export default values;
export * from './values';
index.js
import values, {a} from './values';
console.log(values, a); // {a: 1, b: 2, c: 3} 1
このいが実行可能なソリューションを試してください:
// use CommonJS to export all keys
module.exports = { a: 1, b: 2, c: 3 };
// import by key
import { a, b, c } from 'commonjs-style-module';
console.log(a, b, c);
設定ファイルに対してこれを行う必要がありました。
var config = {
x: "CHANGE_ME",
y: "CHANGE_ME",
z: "CHANGE_ME"
}
export default config;
このようにできます
import { default as config } from "./config";
console.log(config.x); // CHANGE_ME
これはTypeScriptを使用しています。
export const a = 1;
export const b = 2;
export const c = 3;
これは Babel transforms 今日で機能し、ES2016モジュールのすべての利点を、その機能が実際にブラウザーに搭載されるたびに活用する必要があります。
export default {a, b, c};
を追加することもできます。これにより、すべての値を* as
なしのオブジェクトとしてインポートできます。つまり、import myModule from 'my-module';
ソース:
以下をお勧めします、module.jsを期待しましょう:
const values = { a: 1, b: 2, c: 3 };
export { values }; // you could use default, but I'm specific here
そして、あなたはindex.jsで行うことができます:
import { values } from "module";
// directly access the object
console.log(values.a); // 1
// object destructuring
const { a, b, c } = values;
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
// selective object destructering with renaming
const { a:k, c:m } = values;
console.log(k); // 1
console.log(m); // 3
// selective object destructering with renaming and default value
const { a:x, b:y, d:z = 0 } = values;
console.log(x); // 1
console.log(y); // 2
console.log(z); // 0
オブジェクトを破壊する他の例: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring
すべての答えには、インポート文の変更が必要です。
使用できるようにしたい場合:
import {a} from './my-module' // a === 1
import * as myModule from './my-module' // myModule.a === 1
質問のように、あなたのmy-module
には、1つのオブジェクトにエクスポートする必要があるすべてのものがあります(たとえば、エクスポートされた値をJoiまたはJSONスキーマで検証したい場合)、my-module
は次のいずれかでなければなりません:
let values = { a: 1, b: 2, c: 3 }
let {a, b, c} = values;
export {a, b, c};
または:
let values = { a: 1, b: 2, c: 3 }
export let {a, b, c} = values;
きれいではありませんが、必要なものにコンパイルされます。
参照: Babelの例
Javascriptを使用すると、多くの愚かなことができます。 YDKJSの本からこの引用を残します。
本の記載ページ->
Variables.js
export const var1 = 'first';
export const var2 = 'second':
export const varN = 'nth';
Index.js
import * as vars from './Variables';
export const Variables = vars;