my-react-library-super_nick
v1.3.0
Published
This branch has been implemented with webpack way, download it and cd in run `yarn install && yarn build`, then the output library should be in `lib/boundle.js`.
Downloads
3
Readme
create react library with webpack.js
This branch has been implemented with webpack way, download it and cd in run yarn install && yarn build
, then the output library should be in lib/boundle.js
.
Remember to delete node_modules/react
manually if you use local link test.
Start from scratch
1.Make folder
mkdir my-react-library
cd my-react-library
mkdir src
2.Install
yarn init -y
yarn add react @emotion/core
yarn add webpack webpack-cli babel-lodaer @babel/core @babel/preset-env @babel/preset-react @emotion/babel-preset-css-prop -D
@emotion/babel-preset-css-prop
is a babel preset we gonna use it later.
3.webpack.config.js
& .babelrc
create webpack.config.js
const path = require('path')
const nodeExternals = require('webpack-node-externals') // exclude 3rd libraries from bundle with
module.exports = {
mode: 'production',
entry: './src/index.js',
output: {
path: path.join(__dirname, 'lib'),
filename: 'bundle.js',
libraryTarget: 'commonjs2',
// libraryTarget: 'umd',
// globalObject: 'this'
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
]
},
externals: [nodeExternals()],
}
.babelrc
{
"presets": [
"@babel/preset-env",
"@babel/preset-react",
"@emotion/babel-preset-css-prop",
"minify"
]
}
4. package.json
edit package.json
"main": "./lib/bundle.js",
...
"scripts": {
"build": "yarn run webpack",
"start": "yarn run webpack -w"
},
5.Create index.js
src/index.js
// Here is the entries of our components
export { default as Button } from './Button'
6.Create Component
src/Button.js
import React, { useEffect, useState } from 'react'
import { css } from '@emotion/core'
function Button() {
const [state, setState] = useState(false)
useEffect(() => {
setTimeout(() => {
setState(!state)
}, 1000)
})
const btnStyle = css`
padding: 10px 20px;
font-size: 4rem;
border: none;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
`
return (
<button
css={css`
${btnStyle};
color: ${state ? 'royalblue' : 'hotpink'};
`}
>
Button
</button>
)
}
export default Button
7. Build or Watch Build
Build: yarn build
Watch build: yarn start
🌈 That's it! 🎉
Use library in you react project locally
1. cd my-react-library
2. run yarn link
to registered the link
3. cd react-project
go to project folder
4. run yarn link my-react-library
5. Test it
yarn start
Then you will get an error like:
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:
The easiest way to sole this is go to my-react-library/node_modules
and delete react
manually
🌈 That's it! 🎉
Publish to npm, finally!!
1.cd my-react-library
2.run yarn publish
Set the version, pass the account then it will be published! 🎉