【发布时间】:2019-02-13 11:44:47
【问题描述】:
所以我正在为我们的 React 应用程序尝试使用 lerna 的 monorepo 设计。
这个想法是创建一个 repo,它将所有的 react 项目作为lerna 包以及一些在应用程序之间共享的通用模块/组件。
现在所有这些通用模块/组件都是 es6 模块。没有被转译。因为公共模块也在不断发展。如果我们构建/转换它们,我确信在那之后反应 HMR 将不起作用(一个疯狂的猜测)。以下是我的目录结构
package.json
lerna.json
|--packages
|--common
|--react-app
|--constants
|--utilities
common 包含常见的 react 元素,例如 table,accordion 等,这些元素被导出为默认的 es6 模块。
react-app 将 common 导入为 dependency。 react-app 有 webpack 构建配置集。
现在当我将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 或忽略 @mypackagein 排除正则表达式。但在我的情况下没有任何效果。
这是我到目前为止所尝试的。
- 从
babel-loader中删除exlucde: /node_modules/=> 不起作用 - 使用
require.resolve('babel-loader')=>不工作 - 添加
resolve.symlinks= false。 - 添加
resolve.modules='node_modules'或path.resove(__dirname,'node_modules')=> 不工作 - 将包路径添加到
babel-loader包括include: [srcPath, lernaPackagesPath],
似乎没有任何效果。 有什么我想念的吗? here 是我的 git test repo 的链接。
【问题讨论】:
-
@loganfsmyth 分享你的答案。我已经在这上面浪费了足够的时间
标签: babeljs webpack-4 babel-loader lerna