React - Как использовать модуль, связанный с npm

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

npm link

в webpack для приложения React?

MyModule_Folder
---------------------------------
    |--package.json
    |--src
        |--myModule
            |--MyComponent.jsx
            |--MyStyle.css
            ...
    |--public
        |--index.html

App
---------------------------------
    |--package.json
    |--src
        ...

MyModule / package.json выглядит так

{
    "name": "@mymodule/external",
    "version": "1.0.0",
    "main": "src/index.jsx",
    "babel": {
        ...
    },
    "devDependencies": {
        ...
    },
    "dependencies": {
        ...
    },
    "scripts": {
        ...
    }
}

Я набрал

cd <path_to_MyModule_Folder>
npm link
cd <path_to_MyReactApp>
npm link @mymodule/external

Если я импортирую свой модуль таким образом

import { MyModuleClass } from "@mymodule/external";

Я получил ошибку

не могли бы вы опубликовать также свою ошибку?

Milos Mosovsky 24.04.2018 00:11

Ошибка: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. Check the render method of nэто URL-адрес ошибки

Vito Lipari 24.04.2018 20:28

Что ж, тогда у вас неправильный MyModule, пожалуйста, покажите полный исходный index.ja myModule

Milos Mosovsky 24.04.2018 20:29

В MyModule есть этот класс import { Component } from "react"; class Esterno extends Component { constructor(props) { super(props); console.info('ElementoEsterno.constructor'); this.val = 15; } render() { return ( <div> Elemento ESTERNO </div> ); } } export default Esterno и файл index.js с таким содержимым: export * from './esterno.jsx';

Vito Lipari 24.04.2018 20:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
4
3 668
1

Ответы 1

Вы ошиблись при импорте экспорта MyModule

MyModule.js

import React from 'react'

export function helloWorld() {}

Class Esterno extends React.Component {
  render() { ..... }
}

export default Esterno

index.js

export * from './MyModule.js'

теперь представьте, что это использование

import Esterno from 'mymodule'

console.info(Esterno)

вы сейчас импортируете все содержимое модуля (*), поэтому отупут будет

object = {
 helloWorld: function() {}
 default: class Esterno {}
}

теперь давайте изменим экспорт в index.js

export default from './MyModule.js`

теперь журнал консоли будет выводить

object = class Esterno {}

поэтому вам не хватает разницы между экспортом / импортом * и default по умолчанию - это модуль по умолчанию, а * - это объект всех экспортов из модуля.

к сожалению у меня все тот же ошибкаElement type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. Check the render method of n. это репозиторий приложений и это репо внешнего модуля

Vito Lipari 24.04.2018 22:58

Ну, у вас во внешнем модуле в package.json указан src/index.js, этот файл не существует, он у вас в корне, и у вас все еще есть экспорт * вместо экспорта по умолчанию, как я писал ...

Milos Mosovsky 24.04.2018 23:01

Я исправил!!! это репозитории приложение и внешний модуль

Vito Lipari 24.04.2018 23:52

где? github.com/vitolipari/react-external_module/blob/master/… Еще вижу export *

Milos Mosovsky 24.04.2018 23:54

Другие вопросы по теме