← Back
css-modules react typescript

Creating React components with tsdx

To build a packageable React component, you need to build the code different that what Create React App does normally. For that purpose you need a bundler with a custom build step.

I've used rollup to create react components in the past. But while that approach worked in the past, I couldn't make it work with css modules

But then I discovered tsdx

Usage with create-react-app #

To add it to my current application, just install the package:

npm install --dev tsdx

And then add a build script:

package.json:

    "component:build": "tsdx build --entry src/MyComponent/index.tsx",

Of course, you can still using npm run start to view your app.

Add css-modules #

If you want css modules support, you need install postcss rollup plugin:

npm i --dev rollup-plugin-postcss

And then create a tsdx configuration file:

tsdx.config.js:

const postcss = require("rollup-plugin-postcss");

module.exports = {
rollup(config, options) {
config.plugins.push(
postcss({
modules: {
globalModulePaths: [/src\/styles\/global/],
},
})
);
return config;
},
};

With that configuration styles in src/styles/global/*.css will not be treated as css modules (remember create-react-app css modules must end with *.module.csssuffix)

Start from scratch #

tsdx comes with a init script:

npx tsdx create my-project

It has several templates, with a handy react with storybook:

tsdx templates