diff --git a/package.json b/package.json index d800d187..a7067973 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "license": "MIT", "scripts": { - "lint": "eslint src", + "lint": "eslint scripts src", "test": "ava --concurrency=5", "test:watch": "npm run test -- --watch", "release": "babel-node scripts/release.js", diff --git a/scripts/release.js b/scripts/release.js index 5e12bcf6..af3566fa 100644 --- a/scripts/release.js +++ b/scripts/release.js @@ -1,3 +1,4 @@ +/* eslint global-require: 0 */ const fs = require('fs') const path = require('path') const { exec, exit, rm, cp, test } = require('shelljs') @@ -6,10 +7,6 @@ const { flowRight: compose } = require('lodash') const readline = require('readline-sync') const semver = require('semver') const glob = require('glob') -const { pascalCase } = require('change-case') -const { rollup } = require('rollup') -const uglify = require('rollup-plugin-uglify') -const rollupBaseConfig = require('../rollup.config') const BIN = './node_modules/.bin' @@ -33,8 +30,8 @@ const writeFile = (filepath, string) => ( const run = async () => { if (exec('git diff-files --quiet').code !== 0) { logError( - 'You have unsaved changes in the working tree. Commit or stash changes ' + - 'before releasing.' + 'You have unsaved changes in the working tree. ' + + 'Commit or stash changes before releasing.' ) exit(1) } @@ -46,7 +43,7 @@ const run = async () => { while (!packageNames.includes(packageName)) { packageName = readline.question( `The package "${packageName}" does not exist in this project. ` + - `Choose again: ` + 'Choose again: ' ) } @@ -63,7 +60,7 @@ const run = async () => { )) { nextVersion = readline.question( `Must provide a valid version that is greater than ${version}, ` + - `or leave blank to skip: ` + 'or leave blank to skip: ' ) } @@ -122,40 +119,18 @@ const run = async () => { JSON.stringify(packageConfig, null, 2) ) - const buildRollup = config => { - log(`Building ${config.dest}...`) - return rollup(config).then(bundle => bundle.write(config)) - } - - const libraryName = pascalCase(packageName) - const rollupConfig = { - ...rollupBaseConfig, - entry: path.resolve(sourceDir, 'index.js'), - moduleName: libraryName, - dest: `${outDir}/build/${libraryName}.js` - } - const rollupMinConfig = { - ...rollupConfig, - dest: `${outDir}/build/${libraryName}.min.js`, - plugins: [ - ...rollupConfig.plugins, - uglify({ - compress: { - pure_getters: true, - unsafe: true, - unsafe_comps: true, - screw_ie8: true, - warnings: false - } - }) - ] + log(`Building ${packageName}...`) + const runRollup = build => + 'rollup --config scripts/rollup.config.js ' + + `--environment BUILD:${build},PACKAGE_NAME:${packageName}` + if (exec([ + runRollup('es'), + runRollup('umd'), + runRollup('min') + ].join(' && ')).code !== 0) { + exit(1) } - await Promise.all([ - buildRollup(rollupConfig), - buildRollup(rollupMinConfig) - ]) - log(`About to publish ${packageName}@${nextVersion} to npm.`) if (!readline.keyInYN('Sound good? ')) { log('OK. Stopping release.') diff --git a/rollup.config.js b/scripts/rollup.config.js similarity index 58% rename from rollup.config.js rename to scripts/rollup.config.js index afce76ba..0cd37ffb 100644 --- a/rollup.config.js +++ b/scripts/rollup.config.js @@ -1,22 +1,28 @@ +const path = require('path') const nodeResolve = require('rollup-plugin-node-resolve') const babel = require('rollup-plugin-babel') const replace = require('rollup-plugin-replace') const commonjs = require('rollup-plugin-commonjs') +const uglify = require('rollup-plugin-uglify') +const { pascalCase } = require('change-case') +const { PACKAGES_SRC_DIR, PACKAGES_OUT_DIR } = require('./getPackageNames') -module.exports = { +const build = process.env.BUILD +const packageName = process.env.PACKAGE_NAME +const libraryName = pascalCase(packageName) +const sourceDir = path.resolve(PACKAGES_SRC_DIR, packageName) +const outDir = path.resolve(PACKAGES_OUT_DIR, packageName) + +const config = { + entry: `${sourceDir}/index.js`, external: [ 'react' ], globals: { react: 'React' }, - // Set library in release script - // moduleName: 'Recompose', - format: 'umd', + moduleName: libraryName, plugins: [ - nodeResolve({ - jsnext: true - }), babel({ exclude: 'node_modules/**', babelrc: false, @@ -48,10 +54,56 @@ module.exports = { 'babel-plugin-transform-regenerator', 'babel-plugin-external-helpers' ] + }) + ] +} + +if (build === 'es') { + config.external.push( + 'fbjs/lib/shallowEqual', + 'hoist-non-react-statics', + 'change-emitter', + 'symbol-observable' + ) + config.dest = `${outDir}/es/${libraryName}.js` + config.format = 'es' +} + +if (build === 'umd') { + config.dest = `${outDir}/build/${libraryName}.js` + config.format = 'umd' + config.plugins.push( + nodeResolve({ + jsnext: true + }), + commonjs(), + replace({ + 'process.env.NODE_ENV': JSON.stringify('development') + }) + ) +} + +if (build === 'min') { + config.dest = `${outDir}/build/${libraryName}.min.js` + config.format = 'umd' + config.plugins.push( + nodeResolve({ + jsnext: true }), commonjs(), replace({ 'process.env.NODE_ENV': JSON.stringify('production') + }), + uglify({ + compress: { + pure_getters: true, + unsafe: true, + unsafe_comps: true, + screw_ie8: true, + warnings: false + } }) - ] + ) } + +export default config diff --git a/src/packages/recompose-relay/package.json b/src/packages/recompose-relay/package.json index 38af2ede..dbc11016 100644 --- a/src/packages/recompose-relay/package.json +++ b/src/packages/recompose-relay/package.json @@ -14,6 +14,7 @@ "utilities", "composition" ], + "module": "es/RecomposeRelay.js", "dependencies": { "lodash": "^4.0.0" }, diff --git a/src/packages/recompose/createHelper.js b/src/packages/recompose/createHelper.js index 3d8350a4..30e8fa3c 100644 --- a/src/packages/recompose/createHelper.js +++ b/src/packages/recompose/createHelper.js @@ -1,3 +1,5 @@ +import wrapDisplayName from './wrapDisplayName' + const createHelper = ( func, helperName, @@ -5,10 +7,6 @@ const createHelper = ( noArgs = false ) => { if (process.env.NODE_ENV !== 'production' && setDisplayName) { - /* eslint-disable global-require */ - const wrapDisplayName = require('./wrapDisplayName').default - /* eslint-enable global-require */ - if (noArgs) { return BaseComponent => { const Component = func(BaseComponent) diff --git a/src/packages/recompose/nest.js b/src/packages/recompose/nest.js index 51091e16..f781c483 100644 --- a/src/packages/recompose/nest.js +++ b/src/packages/recompose/nest.js @@ -1,4 +1,5 @@ import createEagerFactory from './createEagerFactory' +import getDisplayName from './getDisplayName' const nest = (...Components) => { const factories = Components.map(createEagerFactory) @@ -9,9 +10,6 @@ const nest = (...Components) => { ) if (process.env.NODE_ENV !== 'production') { - /* eslint-disable global-require */ - const getDisplayName = require('./getDisplayName').default - /* eslint-enable global-require */ const displayNames = Components.map(getDisplayName) Nest.displayName = `nest(${displayNames.join(', ')})` } diff --git a/src/packages/recompose/onlyUpdateForPropTypes.js b/src/packages/recompose/onlyUpdateForPropTypes.js index 268b4471..b2d65165 100644 --- a/src/packages/recompose/onlyUpdateForPropTypes.js +++ b/src/packages/recompose/onlyUpdateForPropTypes.js @@ -1,13 +1,11 @@ import onlyUpdateForKeys from './onlyUpdateForKeys' import createHelper from './createHelper' +import getDisplayName from './getDisplayName' const onlyUpdateForPropTypes = BaseComponent => { const propTypes = BaseComponent.propTypes if (process.env.NODE_ENV !== 'production') { - /* eslint-disable global-require */ - const getDisplayName = require('./getDisplayName').default - /* eslint-enable global-require */ if (!propTypes) { /* eslint-disable */ console.error( diff --git a/src/packages/recompose/package.json b/src/packages/recompose/package.json index d2381b49..647170e6 100644 --- a/src/packages/recompose/package.json +++ b/src/packages/recompose/package.json @@ -9,6 +9,7 @@ "utilities", "composition" ], + "module": "es/Recompose.js", "dependencies": { "change-emitter": "^0.1.2", "fbjs": "^0.8.1", diff --git a/src/packages/recompose/renderComponent.js b/src/packages/recompose/renderComponent.js index 6e989612..2b2c768c 100644 --- a/src/packages/recompose/renderComponent.js +++ b/src/packages/recompose/renderComponent.js @@ -1,13 +1,11 @@ import createHelper from './createHelper' import createEagerFactory from './createEagerFactory' +import wrapDisplayName from './wrapDisplayName' const renderComponent = Component => _ => { const factory = createEagerFactory(Component) const RenderComponent = props => factory(props) if (process.env.NODE_ENV !== 'production') { - /* eslint-disable global-require */ - const wrapDisplayName = require('./wrapDisplayName').default - /* eslint-enable global-require */ RenderComponent.displayName = wrapDisplayName(Component, 'renderComponent') }