Rollup и Redux: index.js не экспортирует значения по умолчанию

Я обновил свое приложение ionic с бета 11 до rc0. Это означает, что я переключился с angular2 rc4 на angular2 stable, с машинописного текста 1.8 на 2 и использовал сборщик модулей rollupjs.

У меня есть архитектура redux и я использую библиотеку Redux.

Я не могу скомпилировать и получаю эту ошибку:

Ошибка: модуль c: \ XXX \ node_modules \ redux \ node_modules \ symbol-observable \ index.js не экспортирует значение по умолчанию (импортировано c: \ XXX \ node_modules \ redux \ es \ createStore.js)

в Module.trace (c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 7677: 29)

в ModuleScope.findDeclaration (c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 7300: 22)

в Scope.findDeclaration (c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 5351: 39)

в Scope.findDeclaration (c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 5351: 39)

в Identifier.bind (c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 6489: 29)

в c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 5151: 50

в MemberExpression.eachChild (c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 5168: 5)

в MemberExpression.bind (c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 5151: 7)

в MemberExpression.bind (c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 6693: 24)

в c: \ XXX \ node_modules \ rollup \ dist \ rollup.js: 5151: 50

У кого-нибудь есть идеи о том, что происходит? Может кто-нибудь подскажет? Я действительно не понимаю, как с этим бороться.

Это то, что у меня есть в rollup.config.js

var ngTemplate = require('../dist/plugins/ng-template').ngTemplate;
var nodeResolve = require('rollup-plugin-node-resolve');
var commonjs = require('rollup-plugin-commonjs');

// https://github.com/rollup/rollup/wiki/JavaScript-API

module.exports = {
  /**
   * entry: The bundle's starting point. This file will
   * be included, along with the minimum necessary code
   * from its dependencies
   */
  entry: './.tmp/app/main.dev.js',

  /**
   * sourceMap: If true, a separate sourcemap file will
   * be created.
   */
  sourceMap: true,

  /**
   * format: The format of the generated bundle
   */
  format: 'iife',

  /**
   * dest: the output filename for the bundle in the buildDir
   */
  dest: 'main.js',

  // Add this to avoid Eval errors
  useStrict: false,

  /**
   * plugins: Array of plugin objects, or a single plugin object.
   * See https://github.com/rollup/rollup/wiki/Plugins for more info.
   */
  plugins: [
    ngTemplate(),
    commonjs({
        include: [
        'node_modules/rxjs/**',
        'node_modules/firebase/**',
        'node_modules/angularfire2/**'
        ],
        namedExports: {
        'node_modules/firebase/firebase.js': ['initializeApp', 'auth', 'database'],
        'node_modules/angularfire2/node_modules/firebase/firebase-browser.js': ['initializeApp', 'auth', 'database']
        }
    }),
    nodeResolve({
      module: true,
      jsnext: true,
      main: true,
      browser: true,
      extensions: ['.js']
    })
  ]

};

person Dee    schedule 02.10.2016    source источник


Ответы (1)


Первая часть ошибки ...

Ошибка: модуль c: \ XXX \ node_modules \ redux \ node_modules \ symbol-observable \ index.js не экспортирует значение по умолчанию

... указывает, что symbol-observable\index.js не имеет инструкции export default. Это потому, что это модуль CommonJS - все его содержимое выглядит следующим образом:

module.exports = require('./lib/index');

Поэтому вам нужно преобразовать это из CommonJS в ES. У вас уже настроен rollup-plugin-commonjs, так что, надеюсь, это всего лишь случай его перенастройки. Сейчас конвертируются только модули внутри rxjs, firebase и angularfire2.

Обычно лучше всего просто включать все node_modules, потому что тогда вам не нужно вручную включать зависимости, такие как symbol-observable:

plugins: [
ngTemplate(),
commonjs({
  include: [
    'node_modules/**'
  ],
  namedExports: {
    'node_modules/firebase/firebase.js': ['initializeApp', 'auth', 'database'],
    'node_modules/angularfire2/node_modules/firebase/firebase-browser.js': ['initializeApp', 'auth', 'database']
  }
}),
nodeResolve(...)

Любые файлы внутри node_modules, которые не являются CommonJS, просто проходят через плагин без изменений.

person Rich Harris    schedule 03.10.2016
comment
Спасибо! Он позаботился о проблеме :) Это означает, что все в массиве include преобразовано из commonjs в ES? - person Dee; 04.10.2016
comment
Только если это является CommonJS - если файл имеет оператор import или export, или если он не использует module, exports или require, то плагин просто проигнорирует его. - person Rich Harris; 04.10.2016