@lemon-clown-wpg/rollup-config-react
TypeScript icon, indicating that this package has built-in type declarations

0.0.4 • Public • Published

npm version npm download npm license

Usage

Install

yarn add --dev @lemon-clown-wpg/rollup-config-react

Demo

  • Add package.json

    {
      "name": "react-hello-world",
      "version": "0.0.0",
      "scripts": {
        "start": "rollup -w -c rollup.config.js",
        "build": "rollup -c rollup.config.js"
      },
      "dependencies": {
        "@types/classnames": "^2.2.9",
        "@types/react": "^16.9.23",
        "@types/react-dom": "^16.9.5",
        "classnames": "^2.2.6",
        "react": "^16.13.0",
        "react-dom": "^16.13.0"
      },
      "devDependencies": {
        "@lemon-clown-wpg/eslint-config-react": "^0.0.3",
        "@lemon-clown-wpg/rollup-config-react": "^0.0.2",
        "rollup": "^1.31.1",
        "stylus": "^0.54.7"
      },
      "browserslist": [
        "last 2 versions",
        "Firefox ESR",
        "> 1%",
        "ie >= 11"
      ]
    }
  • Install dependencies

    yarn install
  • create .eslintc

    {
      "extends": [
        "@lemon-clown-wpg/eslint-config-react"
      ],
      "parserOptions": {
        "project": "./tsconfig.json"
      },
      "rules": {
      }
    }
  • create tsconfig.json

    {
      "compilerOptions": {
        "moduleResolution": "node",
        "resolveJsonModule": true,
        "strict": true,
        "strictNullChecks": true,
        "noUnusedLocals": false,
        "noUnusedParameters": false,
        "noImplicitAny": true,
        "noImplicitThis": true,
        "noImplicitReturns": false,
        "alwaysStrict": true,
        "suppressImplicitAnyIndexErrors": true,
        "newLine": "LF",
        "removeComments": false,
        "composite": true,
        "declarationMap": true,
        "declaration": true,
        "sourceMap": true,
        "pretty": false,
        "esModuleInterop": true,
        "allowSyntheticDefaultImports": true,
        "experimentalDecorators": true,
        "forceConsistentCasingInFileNames": true,
        "downlevelIteration": true,
        "outDir": "lib",
        "rootDir": "src",
        "target": "es5",
        "module": "esnext",
        "jsx": "react",
        "lib": [
          "esnext",
          "dom",
          "dom.iterable"
        ]
      },
      "include": [
        "src"
      ]
    }
  • Create rollup configuration rollup.config.js

    import path from 'path'
    import * as react from 'react'
    import * as reactDOM from 'react-dom'
    import { createRollupConfig } from '@lemon-clown-wpg/rollup-config-react'
    import manifest from './package.json'
    
    const paths = {
      eslintrc: path.resolve(__dirname, '.eslintrc'),
      tsconfig: path.resolve(__dirname, 'tsconfig.json'),
    }
    
    const config = createRollupConfig({
      manifest,
      preprocessOptions: {
        stylesheets: {
          input: 'src/**/*.styl',
          multiEntryOptions: {
            exports: false,
          },
          postcssOptions: {
            modules: {
              camelCase: true,
            },
          }
        }
      },
      pluginOptions: {
        eslintOptions: {
          configFile: paths.eslintrc,
          include: ['src/**/*{.ts,.tsx}'],
          exclude: ['src/**/*.styl.d.ts'],
        },
        typescriptOptions: {
          tsconfig: paths.tsconfig,
          include: ['src/**/*{.ts,.tsx}'],
          exclude: '**/__tests__/**',
        },
        commonjsOptions: {
          include: ['../../node_modules/**'],
          exclude: ['**/*.stories.js'],
          namedExports: {
            'react': Object.keys(react),
            'react-dom': Object.keys(reactDOM),
          },
        },
        postcssOptions: {
          // extract: true,
          // minimize: false,
          extract: false,
          minimize: true,
          modules: {
            camelCase: true,
            generateScopedName: 'wpg-[local]',
          },
        }
      }
    })
    
    export default config
  • Create a entry file src/index.tsx

    import React from 'react'
    import classes from './style.styl'
    
    
    export interface HelloWorldProps {
      content?: string
    }
    
    
    export function HelloWorld(props: HelloWorldProps): React.ReactElement {
      const { content = 'Hello, world!' } = props
      return (
        <div className={ classes.container }>
          <h1 className={ classes.content }>{ content }</h1>
        </div>
      )
    }
  • Create a stylus file src/index.styl

    .container
      display: flex
      .content
        font-family: 'Comic Sans', sans-serif
        font-size: 18px
        color: #1a1a1a
        line-height: 1.75
  • Commands:

    • yarn build
    • yarn start

Options

manifest

property required description
source true source entry file
main false cjs target entry file
module false cjs target entry file

preprocessOptions

stylesheet

property required description
input true see Supported Input Types
output false
pluginOptions false

pluginOptions

property required description
eslintOptions false options for rollup-plugin-eslint
nodeResolveOptions false options for @rollup/plugin-node-resolve
commonjsOptions false options for @rollup/plugin-commonjs
typescriptOptions false options for rollup-plugin-typescript2
peerDepsExternalOptions false options for rollup-plugin-peer-deps-external
postcssOptions false options for @lemon-clown-wpg/rollup-plugin-postcss-dts

References

Package Sidebar

Install

npm i @lemon-clown-wpg/rollup-config-react

Weekly Downloads

0

Version

0.0.4

License

MIT

Unpacked Size

23.8 kB

Total Files

15

Last publish

Collaborators

  • lemonclown