【问题标题】:export material ui themed package导出材质ui主题包
【发布时间】:2020-07-23 00:17:34
【问题描述】:

我想创建一个新的 npm 包,我可以在其中导出所有 @material-ui/core 组件,但以我的方式为主题。目前使用打字稿和汇总,但失败。这是我的代码

index.ts

export { Button } from '@material-ui/core'; 

package.json

{
  "name": "@ripley-ui/core",
  "version": "1.0.0",
  "description": "",
  "main": "build/index.js",
  "module": "build/index.esm.js",
  "types": "build/index.d.ts",
  "files": [
    "build"
  ],
  "scripts": {
    "build": "rollup -c",
    "storybook": "start-storybook -p 6006",
    "storybook:export": "build-storybook",
    "test": "jest",
    "test:watch": "jest --watch"
  },
  "author": "",
  "license": "ISC",
  "peerDependencies": {
    "react": "^16.13.1",
    "react-dom": "^16.13.1"
  },
  "devDependencies": {
    "@babel/core": "^7.10.4",
    "@rollup/plugin-commonjs": "^13.0.0",
    "@rollup/plugin-node-resolve": "^8.1.0",
    "@storybook/react": "^5.3.19",
    "@testing-library/jest-dom": "^5.11.0",
    "@testing-library/react": "^10.4.5",
    "@types/jest": "^26.0.4",
    "@types/react": "^16.9.43",
    "babel-loader": "^8.1.0",
    "babel-preset-react-app": "^9.1.2",
    "identity-obj-proxy": "^3.0.0",
    "jest": "^26.1.0",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "rollup": "^2.21.0",
    "rollup-plugin-peer-deps-external": "^2.2.3",
    "rollup-plugin-typescript2": "^0.27.1",
    "ts-jest": "^26.1.1",
    "typescript": "^3.9.6"
  },
  "dependencies": {
    "@material-ui/core": "^4.11.0"
  }
}

rollup.config.js

import external from "rollup-plugin-peer-deps-external";
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import typescript from "rollup-plugin-typescript2";

const packageJson = require("./package.json");

export default {
  input: "src/index.ts",
  output: [
    {
      file: packageJson.main,
      format: "cjs",
      sourcemap: true
    },
    {
      file: packageJson.module,
      format: "esm",
      sourcemap: true
    }
  ],
  external: ["react", "@material-ui/core"],
  plugins: [
    external(),
    resolve(),
    typescript({
      rollupCommonJSResolveHack: true,
      clean: true
    }),
    commonjs(),
  ]
};

和 tsconfing.json

{
  "compilerOptions": {
    "rootDir": "src",
    "declaration": true,
    "declarationDir": "build",
    "module": "esnext",
    "target": "es5",
    "lib": ["es6", "dom", "es2016", "es2017"],
    "sourceMap": true,
    "jsx": "react",
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true
  },
  "include": ["src/**/*"],
  "exclude": [
    "node_modules",
    "build",
    "storybook-static",
    "src/**/*.stories.tsx",
    "src/**/*.test.tsx"
  ]
}

将Button导入新应用时出现的错误是

Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.

请帮忙!

更新

我又做了一个测试,这次创建并导出了一个我自己制作的新组件,仍然得到同样的无效钩子调用错误,代码如下!

import React, { useState } from "react";

import { TestComponentProps } from "./TestComponent.types";


const TestComponent: React.FC<TestComponentProps> = ({ theme }) => {
  const [state, setState] = useState('prueba')
  return (
  <div
    data-testid="test-component"
    className={`test-component test-component-${theme}`}
  >
    <h2>{state}</h2>
  </div>
)};

export default TestComponent;

所以也许是我的捆绑器或编译器问题?

【问题讨论】:

  • 你应该再检查一下,你的组件是使用像makeStyles()这样的钩子吗?
  • @Michael 是的,所有 material-ui 组件都有这个钩子 makeStyles(),但不知道怎么弄错了
  • 你能告诉我使用makeStyles()的代码吗?
  • @Michael 这里是 makeStyles() material-ui.com/styles/api/#makestyles-styles-options-hook 的文档,但是我做了另一个测试,我已经在上面更新了,所以你可以看到我的愚蠢组件尝试使用钩子,但仍然使相同的无效钩子调用错误

标签: reactjs typescript npm material-ui rollupjs


【解决方案1】:

在进一步调查了 lil 之后,我发现这不是您的打包程序错误(也不是 webpack、parcel 或 rollup)。要解决此问题,您只需将构建发布到 npm 并从那里(不是本地)安装它,瞧,它可以工作。干杯

【讨论】:

  • 知道为什么会这样吗?我们如何在本地开发它?
  • 这是个好问题,我想知道答案:)
【解决方案2】:

devDependencies 中排除reactreact-dom 帮助我解决了这个错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2021-04-23
    • 2020-08-05
    • 2020-07-08
    相关资源
    最近更新 更多