Можно ли передать параметры в импорт ES6?

Как вы переводите это:

var x = require('module')(someoptions);

на ES6?

Нет способа сделать это с помощью одного оператора import, он не допускает вызовов.

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

// module.js
export default function(options) {
    return {
        // actual module
    }
}

// main.js
import m from 'module';
var x = m(someoptions);

В качестве альтернативы, если вы используете загрузчик модулей, который поддерживает обещания monadic , вы можете сделайте что-то вроде

System.import('module').ap(someoptions).then(function(x) {
    …
});

С новым import operator оно может стать

const promise = import('module').then(m => m(someoptions));

или

const x = (await import('module'))(someoptions)

, однако вам, вероятно, не нужен динамический импорт, а статический.

Concept

Вот мое решение, использующее ES6

Очень похоже на ответ @ Bergi, это «шаблон», который я использую при создании импорта, для которого нужны параметры, передаваемые для объявлений class. Это используется в изоморфной структуре, которую я пишу, поэтому будет работать с транспилером в браузере и в node.js (я использую Babel. Это как окно, которое вы можете открыть с помощью Webpack):

./ MyClass.js

export default (Param1, Param2) => class MyClass {
    constructor(){
        console.log( Param1 );
    }
}

./ main.js

import MyClassFactory from './MyClass.js';

let MyClass = MyClassFactory('foo', 'bar');

let myInstance = new MyClass();

. Выше будет выводить foo в консоли

I Вместо этого используйте любой из методов, ранее упомянутых другими: свойство

Пример реального мира

Для примера из реального мира я использую это для передачи пространства имен для доступа к другим классам и экземплярам в рамках. Потому что мы просто создаем функцию и передаем объект в в качестве аргумента мы можем использовать его с нашим объявлением класса likeso:

export default (UIFramework) => class MyView extends UIFramework.Type.View {
    getModels() {
        // ...
        UIFramework.Models.getModelsForView( this._models );
        // ...
    }
}

Импорт немного сложнее и automagical в моем случае, учитывая, что это целая структура, но по сути это то, что происходит:

// ...
getView( viewName ){
    //...
    const ViewFactory = require(viewFileLoc);
    const View = ViewFactory(this);
    return new View();
}
// ...

I надеюсь, это поможет!

Опираясь на ответ @ Bergi на использование модуля отладки с использованием es6, я бы сказал, что

// original
var debug = require('debug')('http');

// ES6
import * as Debug from 'debug';
const debug = Debug('http');

// Use in your code as normal
debug('Hello World!');

вы можете использовать загрузчики модулей es6. http://babeljs.io/docs/learn-es6/

System.import("lib/math").then(function(m) {
  m(youroptionshere);
});

Вам просто нужно добавить эти 2 строки.

import xModule from 'module';
const x = xModule('someOptions');

Вот мой взгляд на этот вопрос, используя в качестве примера модуль отладки ;

На странице npm этого модуля у вас есть следующее: import {debug as Debug} из ‘debug’ const debug = Debug (‘ http ‘) ;

Вот одна строка, чтобы проверить, если

В строке выше, строка передается в импортируемый модуль для создания. Вот как вы могли бы сделать то же самое в ES6


Надеюсь, это кому-нибудь поможет.


javascript — динамически устанавливаемое значение ввода файла — переполнение стека