Итак, я пробую дизайн монорепозитория с lerna
для наших реагирующих приложений. идея состоит в том, чтобы создать один репозиторий, в котором все реагирующие проекты будут представлены в виде пакетов lerna
, а также некоторые общие модули/компоненты, которые используются приложениями.
теперь все эти общие модули/компоненты являются модулями es6. которые не транспилируются. потому что общие модули также постоянно развиваются. и если мы создадим/перенесем их, я уверен, что HMR не будет работать после этого (дикое предположение). Ниже приведена моя структура каталогов.
package.json
lerna.json
|--packages
|--common
|--react-app
|--constants
|--utilities
common
содержит общие элементы реакции, такие как table,accordion
и т. д., которые экспортируются как модули es6 по умолчанию.
react-app
импортирует common
как dependency
. react-app
настроена конфигурация сборки веб-пакета.
теперь, когда я импортирую модуль common
в мой react-app
babel transform
, происходит сбой с этой ошибкой
Button.component.jsx 7:19
Module parse failed: Unexpected token (7:19)
You may need an appropriate loader to handle this file type.
| const { Search } = Input;
| class TextBoxWithButton extends React.Component {
> static propTypes = {
| placeholder: PropTypes.string.isRequired,
| onAction: PropTypes.func.isRequired,
@ ./src/App/Modules/Todo/Components/Header/Header.component.jsx 10:0-111 16:25-41
@ ./src/App/Modules/Todo/Todo.component.jsx
@ ./src/App/Router/index.jsx
@ ./src/App/Layout/index.jsx
@ ./src/App/index.jsx
@ ./src/App.hot.js
@ ./src/index.jsx
что означает, что babel-loader
не может анализировать и транспилировать то, что находится в папке node_nodules
, что имеет смысл, поскольку ожидается, что все зависимости уже транспилированы. но не всегда. если вы управляете локальными зависимостями, вы не можете постоянно их строить (я так думаю)
теперь я нашел в Интернете несколько решений, которые позволяют 1bable-loader
не исключать node_modules
или игнорировать @mypackage
in exclude regex. но ничего не работает в моем случае.
вот что я пробовал до сих пор.
- удалить
exlucde: /node_modules/
изbabel-loader
=> не работает - используйте
require.resolve('babel-loader')
=> не работает - добавить
resolve.symlinks= false
. - добавить
resolve.modules='node_modules'
илиpath.resove(__dirname,'node_modules')
=> не работает - добавить путь пакетов к
babel-loader
включитьinclude: [srcPath, lernaPackagesPath]
,
ничего не работает. есть что-то, чего мне не хватает? вот ссылка на мой тестовый репозиторий git.