【问题标题】:How to publish React component without including react如何在不包含 React 的情况下发布 React 组件
【发布时间】:2017-10-16 13:23:06
【问题描述】:

我正在创建一个React 组件并希望发布它。

我已经输入了package.json

  "peerDependencies": {
    "react": "^15.6.1",
    "react-dom": "^15.6.1"
  },

并且期望在使用 webpack 构建我的模块时,我的组件不会大喊:

 Module not found: Error: Can't resolve 'react'

如何在不包含 React 的情况下编译生产组件?

我检查了一些著名的:

react-select react-toggle

并且他们仅在 peerDependecies 中列出了反应(我猜在 devDependecies 中,出于测试和开发目的) 如果我将 react 添加到我的 devDeps 并运行 webpack -p,它会成功编译,但我的组件包中有 react

这是我的simple webpack config

我错过了什么?

更新 我在 webpack 配置中添加了“external”选项(更新了要点),这是正确编译的,它不包含 React 包,但是当我将它导入到 React 项目中以使用它时,它给了我:

无法读取未定义的属性“组件”

一旦找到我的组件的React.Component...

【问题讨论】:

    标签: javascript reactjs webpack


    【解决方案1】:

    您可以将其设置为peerDependency,也可以将其添加为devDependency,这样您就可以在本地安装它。确保它在 webpack 配置中为 external。这就是你所需要的一切

    https://webpack.js.org/configuration/externals/#object

      externals: {
        react: {
          root: 'React',
          commonjs2: 'react',
          commonjs: 'react',
          amd: 'react'
        },
        'react-dom': {
          root: 'ReactDOM',
          commonjs2: 'react-dom',
          commonjs: 'react-dom',
          amd: 'react-dom'
        },
        'prop-types': {
          root: 'PropTypes',
          commonjs2: 'prop-types',
          commonjs: 'prop-types',
          amd: 'prop-types'
        }
      },
    
      output: {
        publicPath: '/',
        filename: '[name]',
        library: "foobar",
        libraryTarget: 'umd',
      }
    

    食用时:

    "dependencies": { 
      "foobar": "1.0.0",
      "react": "~16.0.0",
      "react-dom": "~16.0.0",
      "prop-types": "^15.6.0"
    }
    

    【讨论】:

    • 谢谢,但是我添加了外部选项(您可以看到有问题的更新要点),它可以编译,按照我的意愿将 React 排除在外,但是当我使用 React 和 @987654327 将其导入项目时@它,当它读取React.Component时,它会失败并显示“无法读取未定义的属性'组件'”
    • 使用它的项目需要安装 react 才能重新解决它。当您 npm install 时,如果不在那里,peerDependenices 应该抱怨并可能破坏构建等。此外,您可能有不同的构建目标 - 例如 UMD 或 CJS - 确保它是一致的。我已更新我的答案以包含典型设置
    • PS 无法访问 gists,被阻止在旨在防止代码泄漏的公司防火墙后面...
    • 在这种情况下,Npm 不会警告我错误的 peerDeps。在同一个文件中,我添加了我的组件,我已经导入了 react 并将其用于其他组件。--
    猜你喜欢
    • 2018-01-31
    • 2021-03-10
    • 2020-01-07
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    相关资源
    最近更新 更多