From eec8d1a4eefa543fd8c8a7d92acbbb03d0dce221 Mon Sep 17 00:00:00 2001 From: Mark Johnson Date: Sun, 22 Apr 2018 08:22:49 -0700 Subject: [PATCH] fix: Improve dist builds to include both popper.js and non-popper.js versions, rollup cleanup, and Readme update. --- .babelrc | 18 +++++++++++-- README.md | 25 ++++++++++++++++-- package.json | 8 +++--- rollup.config.js | 68 +++++++++++++++++++++++++----------------------- 4 files changed, 78 insertions(+), 41 deletions(-) diff --git a/.babelrc b/.babelrc index 4be9602..210941a 100644 --- a/.babelrc +++ b/.babelrc @@ -1,4 +1,18 @@ { - "presets": [["env", { "modules": false }], "stage-2", "react"], - "plugins": ["transform-class-properties"] + "presets": [ + ["env", { "modules": false }], + "stage-2", + "react" + ], + "plugins": [ + "external-helpers", + "transform-class-properties" + ], + "env": { + "production": { + "plugins": [ + ["transform-react-remove-prop-types", { "removeImport": true }] + ] + } + } } diff --git a/README.md b/README.md index 2b8e2e8..9cd869d 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,32 @@ React wrapper around [PopperJS](https://github.com/FezVrasta/popper.js/). `npm install react-popper --save` or `yarn add react-popper` + +### CDN + +If you prefer to include React Popper globally by marking `react-popper` as external in your application, the `react-popper` library (expose as `ReactPopper`) provides various single-file distributions, which are hosted on the following CDNs: + +* [**cdnjs**](https://cdnjs.com/libraries/react-popper) +```html + + + + + +``` + +* [**unpkg**](https://unpkg.com/react-popper/) ```html - -(UMD library exposed as `ReactPopper`) + + + + + ``` +> **Note**: To load a specific version of React Popper replace `0.10.2` with the version number. + + ## Usage ```js diff --git a/package.json b/package.json index 148bcec..908bed0 100644 --- a/package.json +++ b/package.json @@ -15,13 +15,11 @@ "react-popper.d.ts" ], "scripts": { - "build": "npm run build:clean && npm run build:es && npm run build:umd && npm run build:cjs && npm run build:umd-min && npm run build:cjs-min", + "build": "npm run build:clean && npm run build:es && npm run build:dist && npm run build:dist:prod", "build:clean": "rm -rf dist/ && rm -rf lib/", "build:es": "babel src --out-dir lib && mv lib/index.js lib/react-popper.js", - "build:umd": "rollup -c --output.format umd --output.name ReactPopper --output.file dist/react-popper.umd.js", - "build:cjs": "rollup -c --output.format cjs --output.name ReactPopper --output.file dist/react-popper.js", - "build:umd-min": "NODE_ENV=production rollup -c --output.format umd --output.name ReactPopper --output.file dist/react-popper.umd.min.js", - "build:cjs-min": "NODE_ENV=production rollup -c --output.format cjs --output.name ReactPopper --output.file dist/react-popper.min.js", + "build:dist": "rollup -c", + "build:dist:prod": "NODE_ENV=production rollup -c", "demo": "parcel --out-dir demo/dist demo/index.html", "prepare": "npm run build", "precommit": "lint-staged", diff --git a/rollup.config.js b/rollup.config.js index 1d40729..2180a91 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -3,38 +3,42 @@ import minify from 'rollup-plugin-babel-minify'; import replace from 'rollup-plugin-replace'; import nodeResolve from 'rollup-plugin-node-resolve'; -export default { - input: 'src/index.js', - plugins: [ - nodeResolve(), - babel({ - babelrc: false, - presets: [['env', { modules: false }], 'stage-2', 'react'], - plugins: [ - 'external-helpers', - ], - env: { - production: { - plugins: [ - ['transform-react-remove-prop-types', { removeImport: true }], - ], - }, +const baseConfig = (outputFormat, fullVersion) => { + const isProduction = process.env.NODE_ENV === 'production'; + + return { + input: 'src/index.js', + plugins: [ + nodeResolve(), + babel(), + replace({ + 'process.env.NODE_ENV': JSON.stringify('production') + }), + isProduction ? minify({ + comments: false, + }) : false, + ], + external: fullVersion + ? ['react', 'react-dom', 'prop-types'] + : ['react', 'react-dom', 'prop-types', 'popper.js'], + output: { + name: 'ReactPopper', + file: 'dist/react-popper.' + (fullVersion ? 'full.' : '') + + outputFormat + (isProduction ? '.min' : '') + '.js', + format: outputFormat, + sourcemap: true, + globals: { + react: 'React', + 'prop-types': 'PropTypes', + 'popper.js': 'Popper', }, - }), - replace({ - 'process.env.NODE_ENV': JSON.stringify('production') - }), - process.env.NODE_ENV === 'production' ? minify({ - comments: false, - }) : false, - ].filter(Boolean), - external: ['react', 'react-dom', 'prop-types'], - output: { - sourcemap: true, - globals: { - react: 'React', - 'prop-types': 'PropTypes', - 'popper.js': 'Popper', }, - }, + }; }; + +export default [ + baseConfig('cjs', true), + baseConfig('cjs', false), + baseConfig('umd', true), + baseConfig('umd', false), +];