Зависимость неразрешенных узловых модулей с использованием Webpack и System

У меня есть следующий импорт ES6 в моем коде для импорта зависимости проекта из папки node_modules:

import React from 'react';

Используя эту конфигурацию веб-пакета, все работает так, как ожидалось:

{
  module: {
    loaders: [
      {
        loader: 'babel',
        test: /(\.js|\.jsx)/,
        exclude: /(node_modules|bower_components)/
      }
    ]
  }
}

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

Но если я настрою babel на использование modules: 'system' для вывода импорта как System.register:

{
  module: {
    loaders: [
      {
        loader: 'babel',
        test: /(\.js|\.jsx)/,
        exclude: /(node_modules|bower_components)/,
        query: {
          modules: 'system',
          moduleIds: true,
          keepModuleIdExtensions: true
        }
      }
    ]
  }
}

тогда связанный файл больше не содержит зависимости реакции, и я должен добавить библиотеку systemjs в скомпилированный файл после прохождения через веб-пакет.

Как мы можем обрабатывать эту конфигурацию с помощью webpack? почему webpack не может объединить зависимость реакции с помощью system, как это уже делается при компиляции в commonjs?

PS: Я специально прошу добиться этого с помощью webpack, а не systemjs-builder или jspm


person JBE    schedule 30.09.2015    source источник


Ответы (1)


Webpack работает не так. Webpack может работать с модулями AMD и CommonJS, но не с модулями SystemJS.

Чтобы Webpack поддерживал модульную систему, он должен иметь возможность просматривать JS и статически решать, какие файлы от чего зависят, а затем изменять файл, чтобы он работал и был совместим с другими модулями. Теперь это не то, что SystemJS, поэтому все, что он видит, - это файл JS, который не ссылается ни на какие модули CommonJS, потому что он никогда не использует require().

person loganfsmyth    schedule 30.09.2015
comment
Технически я понимаю, почему это происходит. Но если бы System должна была стать следующим стандартом, я бы подумал, что Webpack мог бы расширить свою поддержку System (даже если это дополнительная конфигурация), так что если импорт не определен, он будет выглядеть в node_modules, как это происходит с commonjs .. . - person JBE; 01.10.2015
comment
Это вопрос, который следует задать разработчику Webpack. Система все еще довольно новая. Некоторое время в разработке также находился webpack 2.x. Возможно, это поддержит его. SystemJS основан на спецификации, которая все еще меняется. Утверждение, что это будет следующая спецификация, предполагает, что спецификация еще не разрабатывается, а это так. - person loganfsmyth; 01.10.2015
comment
Однако, если вы используете webpack, от использования модульной системы, отличной от ES6 - ›CommonJS, на самом деле ничего не получится. Webpack 2 будет поддерживать стандартные модули ES6, поэтому вам просто нужно полностью отключить транспилирование модулей в Babel. - person loganfsmyth; 01.10.2015