问题描述
我正在捆绑一个打字稿React组件包,我想知道在用户安装react组件包时是否有一种方法可以忽略react和react-dom。
如果我不从节点模块中删除react和react dom,用户将遇到此问题
如果我已经做出反应并从节点模块中删除了dom,则组件可以正常工作。我不想继续来回删除节点模块。我该如何简化呢?
我如何告诉package.json忽略react和react节点模块中的dom?
tsconfig.json
{
"compilerOptions": {
"outDir": "dist","sourceMap": true,"noImplicitAny": true,"esModuleInterop": true,"module": "esnext","target": "es6","moduleResolution": "node","jsx": "react"
},"exclude": ["examples"]
}
package.json
{
"name": "commentBox-simple-demo","version": "1.0.0","description": "","main": "dist/index.js","scripts": {
"start": "webpack-dev-server --mode development","transpile": "tsc","prepublishOnly": "npm run transpile"
},"author": "","license": "ISC","devDependencies": {
"@babel/core": "^7.11.6","@babel/preset-env": "^7.11.5","@babel/preset-react": "^7.10.4","@types/react": "16.9.23","@types/react-dom": "16.9.5","awesome-ts-loader": "^1.3.1","babel-core": "^6.26.3","babel-preset-env": "^1.7.0","babel-preset-react": "^6.24.1","css-loader": "^4.3.0","html-webpack-plugin": "^4.4.1","react": "^16.13.1","react-dom": "^16.13.1","style-loader": "^1.2.1","ts-loader": "6.2.1","typescript": "3.8.3","webpack": "^4.44.1","webpack-cli": "^3.3.12","webpack-dev-server": "^3.11.0"
},"peerDependencies": {
"react": "^16.3.0","react-dom": "^16.3.0"
},"dependencies": {
"@material-ui/core": "^4.11.0","@material-ui/icons": "^4.9.1","@material-ui/types": "^5.1.0"
}
}
webpack.config.js
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const htmlWebpackPlugin = new HtmlWebpackPlugin({
template: path.join(__dirname,"examples/index.html"),filename: "./index.html",});
module.exports = {
entry: path.join(__dirname,"examples/index.tsx"),output: {
path: path.join(__dirname,"dist"),filename: "index.js",},module: {
rules: [
{
test: /\.(ts|tsx|js|jsx)$/,use: "ts-loader",exclude: /node_modules/,{
test: /\.css$/,use: ["style-loader","css-loader"],],plugins: [htmlWebpackPlugin],resolve: {
extensions: [".js",".jsx",".ts",".tsx"],devServer: {
port: 3001,};
解决方法
您基本上已经告诉npm通过将react和react-dom放在peerDependencies下来做到这一点。这告诉npm不要为您的软件包安装react和react-dom,而是假设正在使用您的软件包的项目已经具有react和react-dom作为依赖项。
尝试将react和react-dom添加到webpack配置的externals
属性中。这告诉webpack不要将它们与您的组件一起打包,并且应该减少版本冲突。