Custom react hook library. Webpack externals and peerDependencies doesn't work
Asked Answered
E

2

6

Each new try I getting 2 cases:

"Invalid hook call" - because of double React environment.

"Can't resolve "react"" - if I would remove it from devDependencies in hook library.

Goal is : to set up correct build environment of hook library.

webpack.config.js

const path = require("path")

module.exports = {
    mode: "production",
    entry: "./src/index.ts",
    output: {
        filename: "index.js",
        path: path.resolve(__dirname, 'dist'),
        clean: true,
        library: "custom-hook-lib",
        libraryTarget: "umd"
    },
    externals: {
        'react': 'react',
        'react-dom' : 'reactDOM'
    },

    resolve: {
        extensions: [".js", ".jsx", ".json", ".ts", ".tsx"]
    },
    
    module: {
        rules: [
            {
                test: /\.(j|t)sx?$/,
                exclude: /(node_modules)/,
                use: 'ts-loader'
            }
        ]        
    }
    
}

package.json

{
  "name": "custom-hook-lib",
  "version": "1.0.0",
  "description": "",
  "main": "dist/index.js",
  "module": "dist/index.js",
  "files": [
    "dist"
  ],
  "keywords": [],
  "license": "ISC",
  "peerDependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "@types/react": "^18.0.17",
    "typescript": "^4.8.2",
    "webpack": "^5.74.0",
    "webpack-cli": "^4.10.0",
    "ts-loader": "^9.3.1"
  }
}


Eadmund answered 27/8, 2022 at 4:32 Comment(0)
E
2

After a few days of investigation I can answer:

There is wasn't building issue. I tried tsc, rollup, webpack. I tried to steal already working libs build configuration. Tried create-react-library. And after that I just get know from this Video, that for the testing you can't use npm/yarn link or just local path if there is hook in your project

You should build and publish your React library that's using hooks to test.

Eadmund answered 3/9, 2022 at 13:12 Comment(1)
After building your hook lib and linking to it in your test app you can try deleting node_modules from the hook lib before testing. It has worked for me in the past when using npm link.Karlmarxstadt
T
0

Do you really need a webpack to bundle your library? As your app will bundle it anyway.

I saw some hook libs use just 'tsc' command as npm build. In that case you app will supply only source code without bundeled deps. Also there will not be react in inner node_modules in hook folder as your react in devDeps and therefore you hook will supply react of your app node_modules.

Now (according the error) it seems that react is still in output bundle of hook lib.

Tetrachord answered 27/8, 2022 at 12:40 Comment(1)
Thanks. Your answer helped to me to dive deeper into projects bundling.Eadmund

© 2022 - 2024 — McMap. All rights reserved.