Ошибка объединения: isValidElementType не экспортируется node_modules / response-is / index.js

Я создаю пакет с rollUp, используя стилизованные компоненты.

Мой rollup.config.js выглядит так:

import resolve from 'rollup-plugin-node-resolve'
import babel from 'rollup-plugin-babel'
import commonjs from 'rollup-plugin-commonjs'
export default {
  input: 'src/index.js',
  output: {
    file: 'dist/bundle.js',
    format: 'cjs'
  },
  external: [
    'react',
    'react-proptypes'
  ],
  plugins: [
    resolve({
      extensions: [ '.js', '.json', '.jsx' ]
    }),
    commonjs({
      include: 'node_modules/**'
    }),
    babel({
      exclude: 'node_modules/**'
    })
  ]
}

И я получаю

[!] Error: 'isValidElementType' is not exported by node_modules/react-is/index.js
https://github.com/rollup/rollup/wiki/Troubleshooting#name-is-not-exported-by-module
node_modules/styled-components/dist/styled-components.es.js (7:9)
5: import stream from 'stream';
6: import PropTypes from 'prop-types';
7: import { isValidElementType } from 'react-is';
            ^
8: import hoistStatics from 'hoist-non-react-statics';

Проверка самого node_modules. Response-is - это модуль commonjs, поскольку его можно проверить тоже здесь.

Разве плагин commonjs не должен позаботиться об этом, поскольку он находится внутри node_modules / **?

Спасибо.


person FabioCosta    schedule 28.04.2018    source источник


Ответы (3)


Я решил это с помощью rollup-plugin-commonjs

и определение экспорта вручную в конфигурации накопления, как показано ниже.

export default {
  input: 'src/index.js',
  output: [
    {
      file: pkg.main,
      format: 'cjs',
      sourcemap: true
    },
    {
      file: pkg.module,
      format: 'es',
      sourcemap: true
    }
  ],
  plugins: [
    external(),
    postcss({
      modules: true
    }),
    url(),
    babel({
      exclude: 'node_modules/**'
    }),
    resolve(),
    commonjs({
      include: 'node_modules/**',
      namedExports: {
        'node_modules/react-is/index.js': ['isValidElementType']
      }
    })
  ]
}

После этого все заработало.

и для информации, моя первоначальная настройка была выполнена через https://github.com/transitive-bullshit/react-modern-library-boilerplate

Надеюсь, это сработает для тебя

person Martin Ratinaud    schedule 30.04.2018
comment
Работал у меня. Спасибо! - person MattC; 15.01.2019
comment
Сработало для меня, хотя мне пришлось использовать ['isValidElementType', 'isContextConsumer'] для моего массива. - person Tetrinity; 10.03.2020

Приведенное выше исправление не сработало для меня. Однако добавление styled-components в rollup.config.js список внешних и глобальных объектов сработало для меня.

    export default {
      ...
      external: ['styled-components'],
      ...
      globals: { 'styled-components': 'styled' },
    };

Я использую машинописный текст create-react-library cli, который поставляется в комплекте с свернуть.

https://github.com/styled-components/styled-components/issues/930

person FrostyDog    schedule 22.10.2018
comment
Просто для обновления, похоже, глобальные переменные теперь являются частью output. Итак, теперь должно получиться: `... external: ['styled-components'] ... output: {globals: {'styled-components': 'styled'}}` - person ragurney; 08.08.2019
comment
Еще одно обновление для create-react-library - поскольку оно использует (ответвление) микробандла, передающего --external styled-components через команду сборки из командной строки, работает - person Hedley Smith; 22.04.2021

Решение, опубликованное FrostyDog, сработало для меня, так что +1 для этого, ОДНАКО ...

Я сразу получил ту же ошибку при попытке импортировать хуки из react, я мог бы следовать приведенному выше решению и сделать

    export default {
      ...
      external: ['styled-components', 'react'],
      ...
    };

в rollup.config.js, но мне нужно было решение, которое решало бы эту проблему для всех библиотек, чтобы эта проблема не повторялась в будущем.

Так что же вместо этого ...

import external from "rollup-plugin-peer-deps-external";
...
export default {
    ...
    plugins: [
        external({
            includeDependencies: true
        }),
        ...
    ]
};

решил это для меня и всех, кто добавил в проект позже.

person Master Noob    schedule 22.04.2020