diff --git a/packages/react-json-tree/package.json b/packages/react-json-tree/package.json index 96a32529..8e322d80 100644 --- a/packages/react-json-tree/package.json +++ b/packages/react-json-tree/package.json @@ -6,6 +6,8 @@ "scripts": { "clean": "rimraf lib", "build": "babel src --out-dir lib", + "build:umd": "rimraf ./umd && webpack --progress --config webpack.config.umd.js", + "build:umd:min": "webpack --env.minimize --progress --config webpack.config.umd.js", "lint": "eslint --max-warnings=0 src test examples/src", "test": "npm run lint && NODE_ENV=test mocha --compilers js:babel-core/register --recursive", @@ -14,13 +16,14 @@ "test:cov": "babel-node ./node_modules/.bin/isparta cover ./node_modules/.bin/_mocha -- --recursive", "prepare": "npm run build", - "prepublishOnly": "npm run test && npm run clean && npm run build", + "prepublishOnly": "npm run test && npm run clean && npm run build && npm run build:umd && npm run build:umd:min", "start": "cd examples && npm start", "precommit": "lint-staged" }, "files": [ "lib", - "src" + "src", + "umd" ], "repository": { "type": "git", @@ -42,6 +45,7 @@ "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-eslint": "^8.0.1", + "babel-loader": "^7.1.5", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-es3-member-expression-literals": "^6.22.0", "babel-plugin-transform-es3-property-literals": "^6.22.0", @@ -68,8 +72,11 @@ "react": "^16.0.0", "react-dom": "^16.0.0", "react-test-renderer": "^16.0.0", - "rimraf": "^2.5.2" - }, + "rimraf": "^2.5.2", + "terser-webpack-plugin": "^1.2.1", + "webpack": "^4.27.1", + "webpack-cli": "^3.2.0" +}, "peerDependencies": { "react": "^15.0.0 || ^16.0.0", "react-dom": "^15.0.0 || ^16.0.0" diff --git a/packages/react-json-tree/webpack.config.umd.js b/packages/react-json-tree/webpack.config.umd.js new file mode 100644 index 00000000..4f74699a --- /dev/null +++ b/packages/react-json-tree/webpack.config.umd.js @@ -0,0 +1,54 @@ +const path = require('path'); +const webpack = require('webpack'); +const TerserPlugin = require('terser-webpack-plugin'); + +module.exports = (env = {}) => ( + { + mode: 'production', + entry: { + app: ['./src/index.js'] + }, + output: { + library: 'ReactJsonTree', + libraryTarget: 'umd', + path: path.resolve(__dirname, 'umd'), + filename: env.minimize ? 'react-json-tree.min.js' : 'react-json-tree.js' + }, + module: { + rules: [ + { + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/ + } + ] + }, + externals: { + react: { + root: 'React', + commonjs2: 'react', + commonjs: 'react', + amd: 'react' + }, + 'react-dom': { + root: 'ReactDOM', + commonjs2: 'react-dom', + commonjs: 'react-dom', + amd: 'react-dom' + } + }, + optimization: { + minimize: !!env.minimize, + minimizer: [ + new TerserPlugin({ + terserOptions: { + safari10: true + } + }) + ] + }, + performance: { + hints: false + } + } +);