- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以将 Material UI 作为 peerDependency 但将其类型保留为 DevDependency?
我正在使用 React + Typescript 构建组件库,组件基于 Material UI 库,使用 Rollup 作为模块打包器。
这是我的 IInputProps
类型扩展 Material UI TextFieldProps
类型的示例。
import { TextFieldProps } from "@material-ui/core";
export type IInputProps = TextFieldProps & {...}
我的目标是将 Material UI 包设置为 peerDependency,因此它将使用安装在目标项目上的 material-ui 包。我将 Material UI 作为 peerDependency 插入,并使用 peerDepsExternal
插件设置 rollup
。当我尝试构建包时,它抛出以下错误:
找不到模块“@material-ui/core”或其相应的类型声明。
原因与这个答案有关(What's the relationship of @material-ui/core and @types/material-ui?)。 Material-UI 包包含它自己的类型定义(*.d.ts 文件
),所以当我将它设置为 peerDependency 时,类型/接口(interface)丢失了。为了解决这个问题,我遵循了这个解决方案(https://github.com/ezolenko/rollup-plugin-typescript2/issues/198)在 src/@types/material-ui/index.d.ts 文件中声明每个模块,但它引发了另一个问题:我不能使用 material-ui 类型/接口(interface)不再。
在我的 src/@types/material-ui/index.d.ts
文件中声明了 @material-ui/core
,代码在下面指出了这个错误。
不能将命名空间“TextFieldProps”用作 type.ts(2709)
导出的类型别名“IInputProps”具有或正在使用私有(private)名称“TextFieldProps”.ts(4081)
现在,我只能看到这两个解决方案:
Library with Material UI packages as peerDependency
npm notice package size: 101.0 kB
npm notice unpacked size: 493.6 kB
Library with Material UI packages
npm notice package size: 1.2 MB
npm notice unpacked size: 6.0 MB
[x:string]:any
所以,我想知道是否有任何方法可以将 Material UI 作为 peerDependency 但将其类型保留为 devDependencies,这样我就可以将它作为 peerDependency 与 Material UI 捆绑在一起并使用它的类型在我的包裹上?
我的配置如下:
src/@types/material-ui/index.d.ts
declare module "@material-ui/core";
rollup.config.js
import peerDepsExternal from "rollup-plugin-peer-deps-external";
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import image from "@rollup/plugin-image";
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
}
],
plugins: [
peerDepsExternal(),
resolve(),
commonjs(),
image(),
typescript({ useTsconfigDeclarationDir: true })
]
};
tsconfig.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,
"typeRoots": ["./src/@types"]
},
"include": ["src/**/*"],
"exclude": [
"node_modules",
"build",
"storybook-static",
"src/**/*.stories.tsx",
"src/**/*.test.tsx"
]
}
package.json
...
"main": "build/index.js",
"module": "build/index.esm.js",
...
,
"peerDependencies": {
"@material-ui/core": "^4.11.4",
"react": "^16.8.0",
"react-dom": "^16.8.0",
},
...
最佳答案
如果您希望使用“外部”@material-ui/core
(即不是汇总的一部分),您应该这样指定。
Rollup 实际上有 documentation在对等依赖项上,它确实指定使用 externals
,例如 lodash
:
// rollup.config.js
import resolve from '@rollup/plugin-node-resolve';
export default {
input: 'src/main.js',
output: {
file: 'bundle.js',
format: 'cjs'
},
plugins: [resolve({
// pass custom options to the resolve plugin
customResolveOptions: {
moduleDirectory: 'node_modules'
}
})],
// indicate which modules should be treated as external
external: ['lodash']
};
关于reactjs - 是否可以将 Material UI 作为 peerDependency 但将其类型保留为 DevDependency?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68581137/
我已经创建了一个 Phaser 插件,但我不确定如何为它正确定义 peerDependencies。问题是移相器最近被复制并移动到新的存储库“phaser-ce”。该插件依赖于“phaser@2.x”
我正在尝试使用 npm peerDependencies 但似乎没有任何效果像宣传的那样。我错过了什么? 设置是,我有两个模块,mod 和 plugin,它们都依赖于来自 npm 的外部模块。 mod
我正在尝试使用 npm peerDependencies 但似乎没有任何效果像宣传的那样。我错过了什么? 设置是,我有两个模块,mod 和 plugin,它们都依赖于来自 npm 的外部模块。 mod
我在 stackoverflow 上看到过关于 npm peerDependencies 警告的类似问题——但没有一个解决 的最佳实践。实际安装依赖项。即,我们现在应该将它们与我们的 dependen
我正在构建一个库并尝试了解如何在peerDependency下安装/指定依赖项。 The npm docs don't talk about this under the command npm in
我是 npm 世界的新手,所以这可能很简单。问题如下: 我有一个安装了 react v.15.2.0 的项目,我需要安装一个包,例如 react 打字员 - https://github.com/js
设置: 打包模型 跨多个应用使用的常见 Mongoose 模型 peerDependencies:“ Mongoose ” 打包应用 依赖项:“ Mongoose ”、“模型” 通过app> npm
当我在我当前的 React 项目上运行 npm i 时,我收到以下关于 React peerDependency 的警告: npm WARN react-tap-event-plugin@3.0.3
我正在编写一个 React 组件库,不想捆绑 React,所以我将库添加到 peerDependencies 而不是 dependencies。 另外,为了防止那些关于缺少 peerDependenc
我正在编写一个 React 组件库,不想捆绑 React,所以我将库添加到 peerDependencies 而不是 dependencies。 另外,为了防止那些关于缺少 peerDependenc
我使用 create-react-app 在 React 中创建了一个 npm 包。由于假定 react 和 react-dom 位于宿主项目中,因此我在我的 package.json 中将它们列为
我有我的自定义库,它是通过 npm 发布的。它声明 peerDependency "lodash": "4.15.*" 据我了解,这意味着无论谁想要使用我的库,都应该提供指定版本的 lodash。所以
所以 NPM 3 已经删除了对等依赖项的自动解析,这很好,但是在开发插件/库以供其他应用程序使用的情况下,如果我让底层库使用 peerDependencies这是正确的概念,这意味着如果有人想在该库上
我刚刚将 ember 更新到 2.4.2: % ember -v version: 2.4.2 node: 5.8.0 os: darwin x64 当我输入:ember init 重新运行蓝图时,如
在我尝试获取所需的库时,npm install 一直运行良好大约一年,现在当我移动到新服务器时,它会出现 PeerDependency 错误。我有点困惑,因为我无法弄清楚代码被破坏的原因,是否有人遇到
在此 package.json 上运行 npm install 时 { "author": ", Inc.", "name": "-angular2-template", "version": "0.
我刚开始了解 peerDependencies,并且我阅读了以下引用资料以寻求如何测试 npm 模块在其 package.json 中包含 peerDependencies: Peer Depende
问题 在 Webpack 中导出 bundle 时,如何排除 3rd-party 模块的 peerDependency? (不是第三方模块本身) 背景 我想在 angular-material 框架之
是否可以将 Material UI 作为 peerDependency 但将其类型保留为 DevDependency? 我正在使用 React + Typescript 构建组件库,组件基于 Mate
尝试使用 styled-components 开发 React 组件库时,我遇到了以下问题. 为了本示例的目的,假设我们有两个存储库,app和 core那core将被 app 消耗. 目前,core用
我是一名优秀的程序员,十分优秀!