gpt4 book ai didi

babeljs - 即使在排除 block 中指定忽略包(lerna)后,babel-loader 也不会在 node_modules 中转译包

转载 作者:行者123 更新时间:2023-12-04 01:52:41 25 4
gpt4 key购买 nike

所以我正在尝试使用 lerna 的 monorepo 设计。对于我们的 react 应用程序。
这个想法是创建一个 repo,它将所有的 react 项目作为 lerna包以及一些在应用程序之间共享的通用模块/组件。

现在所有这些通用模块/组件都是 es6 模块。没有被转译。因为公共(public)模块也在不断发展。如果我们构建/转换它们,我确信在那之后 react HMR 将不起作用(一个疯狂的猜测)。以下是我的目录结构

package.json
lerna.json
|--packages
|--common
|--react-app
|--constants
|--utilities
common包含常见的 react 元素,如 table,accordion等等,它们被导出为默认的 es6 模块。
react-app进口 commondependency . react-app有 webpack 构建配置集。

现在当我导入 common模块到我的react-app通天塔 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 中的内容文件夹,这是有道理的,因为所有依赖项都应该已经被转译。但不总是。如果您管理本地依赖项,则无法始终构建它们(这就是我的想法)

现在我在网上找到了一些启用 1 bable-loader 的解决方案不排除 node_modules或忽略 @mypackage在排除正则表达式。但在我的情况下没有任何效果。

这是我到目前为止所尝试的。
  • 删除 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] ,

  • 似乎没有任何效果。
    有什么我想念的吗?
    here是我的 git test repo 的链接。

    最佳答案

    babel-loader默认情况下不会转译 node_modules 中的任何内容.您可以在 node_modules 中明确说明要转换的内容但在 @babel7.0.0 之后这似乎也不起作用。
    还有.babelrc的范围在 @babel7.0.0 中引入.

    根据我在正常情况下所做的研究 node_modules期望已转译 commonjsumd模块。可以由任何应用程序导入。在我的情况下,我的包/组件,所有 es6需要转译的模块。我的 webpack 构建失败了,因为 babel-loader只是无视他们。

    所以我决定使用@babel/cli要转换我的组件所在的每个包,我必须添加 .babelrc连同我的组件包的其他配置并使用 @babel/cli 构建它们

    这是scripts在我的package.json

    "scripts": {
    "start": "babel src --watch --out-dir dist --source-maps inline --copy-files --ignore spec.js,spec.jsx"
    },

    之后我的 package.json 看起来像这样
    {
    "name": "@pkg/components",
    "version": "1.0.1",
    "description": "a repository for react common components. may or may not be dependent on elements",
    "main": "dist/index.js",
    "author": "hannad rehman",
    "license": "MIT",
    "scripts": {
    "start": "babel src --watch --out-dir dist --source-maps inline --copy-files --ignore spec.js,spec.jsx"
    },
    "dependencies": {
    "@pkg/constants": "^1.0.1",
    "@pkg/elements": "^1.0.1"
    },
    "peerDependencies": {
    "prop-types": "^15.6.2",
    "react": "^16.4.2",
    "react-router-dom": "^4.3.1"
    }
    }

    用这种方法。在任何应用程序可以导入它们之前,我所有的常用包都将进行单元测试、检查和构建。 babel具有监视模式,可确保在发生更改时始终进行转译。

    最后也是最重要的 react HMR按预期工作。

    更新

    上述解决方案确实有效,但几个月后我通过在 babel 加载器中使用 include 属性对其进行了更改
    {
    test: /\.js(x?)$/,
    include: [/node_modules\/@pkg/],
    use: [
    'thread-loader',
    {
    loader: 'babel-loader',
    options: {
    cacheDirectory: true,
    configFile: path.resolve(
    __dirname,
    '../../../../',
    `${env.appConfig.folderSrc}/babel.config.js`,
    ),
    },
    },
    ],
    }

    关于babeljs - 即使在排除 block 中指定忽略包(lerna)后,babel-loader 也不会在 node_modules 中转译包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52234094/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com