{"_id":"reskript","_rev":"124-c3b8ebd71d55e77c2cc2b5f698853a3c","name":"reskript","dist-tags":{"latest":"0.26.7","next":"0.26.0-beta.14","dev":"0.26.0-dev.7"},"versions":{"0.8.0":{"name":"reskript","version":"0.8.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.2.2","@babel/plugin-proposal-class-properties":"^7.3.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/babel__core":"^7.0.4","@types/glob":"^7.1.1","@types/hasha":"^3.0.0","ajv":"^6.7.0","autoprefixer":"^9.4.6","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^23.6.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.0.0","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","eslint":"^5.12.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.1.3","eslint-plugin-react":"^7.12.4","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^3.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^23.6.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","noop-loader":"^1.0.0","param-case":"^2.1.1","pkg-dir":"^3.0.0","postcss-less":"^3.1.1","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.2.0","react-transform-hmr":"^1.0.4","rollup":"^1.1.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.12.1","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.0.0","tty-table":"^2.6.15","typescript":"^3.2.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","yarn-lock-convert":"^1.0.2","webpack":"^4.10.2"},"optionalDependencies":{"webpack":"^4.10.2"},"devDependencies":{"@types/babel__generator":"^7.0.1","@types/babel__template":"^7.0.1","@types/babel__traverse":"^7.0.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^8.0.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.43","@types/internal-ip":"^3.0.0","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.120","@types/node":"^11.9.4","@types/package-json":"^5.0.0","@types/pkg-dir":"^2.0.0","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/source-map":"^0.5.7","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"94f34d1d7ea84dd2d825baf998c345f6be47c963","_id":"reskript@0.8.0","_nodeVersion":"11.10.1","_npmVersion":"6.7.0","dist":{"integrity":"sha512-nXYMAtsB+hUsLZQjOuFYNOHTw6jp2D2R4cBYDYgf4A4FEs49x2uzTGJ5IUNHjhMo8tEqzQhZjWfLQxYCGLOMjw==","shasum":"a09f7286d13eb68d2776c9488247af73cddbfc5f","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.8.0.tgz","fileCount":134,"unpackedSize":208300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJce3yhCRA9TVsSAnZWagAAI1gP/1oSmK674zWrLFIAw0Lc\n24fcNfKxax2xxfA3mFV9aeFqlKOk9Q7JuniJrtufKpW8ykixXSpEu9k90Q9A\nPs6qDbm8r3ZtkvYSe0oHRwGY5LfnMPxn5e5i1y0wWQyaBpc/1sCL2+oNuMea\nQj1PVosQ2Sltryiy0yYImW8eNWWQOcxp1ebxx0kaQn/k4vPffeTp5T/zlyk1\nDaDcx+Aio/n8F5lbUbjICuN+2+mpnBP0c59UTZHzD4r/2s3N3dMYpjPEQ9Uk\nEt/x8QMiVQN9EHBXRz4JjEK6wmVCa2Vo6UIuydm2DdiJhwZeIKk1Xx0Agucd\nTGuFkKY7b7BiyspbluKK8xrn3eaddSt9f6ZHjMHwu0kC0U4/K2Q8ncSzqfp2\n97NN9rDxg/WspBazuANoKWjG6DD9iR+O5B5N4B5uIARPw64ndhYFqbDxKf6P\nzm/a+pQD2k6dFH449nJEOZVGti/tn58+pQXX0kt0sC6J0Lx72aAa5cyqqIuh\nJDcYSnSiB7VfDjz6SxnQb88xjP31tOC98BuCEgaALTmglMHSFNTTiGa+HC/z\n5F5Fw15ZRZ+NHz5f37tCw13Sb2QUHHweNBeKXUCfGY2MXFt6DeQP2JhOhDYS\nahrExVL/PVhAxR457ghN0rLROQjDbPzdrsEfD85sziMfXDXbTM3Uzet0otap\nAnPD\r\n=2y3x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJFjtAjL/05dbfgjuIX3Ka/BM1gOhZHNidlQSYV6+fUwIhAIRXLUZ6kLsZAi88I/JXJ+TkKQoj7HcWCzfBHAqePcW9"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.8.0_1551596704779_0.47368798300866133"},"_hasShrinkwrap":false},"0.9.0":{"name":"reskript","version":"0.9.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.2.2","@babel/plugin-proposal-class-properties":"^7.3.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/babel__core":"^7.0.4","@types/glob":"^7.1.1","@types/hasha":"^3.0.0","@yarnpkg/lockfile":"^1.1.0","ajv":"^6.7.0","autoprefixer":"^9.4.10","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.0.0","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","eslint":"^5.15.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.1.3","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.4.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^3.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","noop-loader":"^1.0.0","param-case":"^2.1.1","pkg-dir":"^3.0.0","postcss-less":"^3.1.1","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.2.0","react-transform-hmr":"^1.0.4","rollup":"^1.1.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.12.1","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.2.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","webpack":"^4.10.2"},"optionalDependencies":{"webpack":"^4.10.2"},"devDependencies":{"@types/babel__generator":"^7.0.1","@types/babel__template":"^7.0.1","@types/babel__traverse":"^7.0.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^8.0.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.9.4","@types/package-json":"^5.0.0","@types/pkg-dir":"^2.0.0","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"985438d3f70983f54072906ebdd17fe5af53080d","_id":"reskript@0.9.0","_nodeVersion":"11.9.0","_npmVersion":"6.8.0","dist":{"integrity":"sha512-K6E8ooJodr0xSULwDhl+e2EDvEz/AziwmJAc1rc9jQSB7h8lMT+1b7pRr9B3/Pt7HdEeSDI5e7gKcd0gHOe5LA==","shasum":"29139d24ee55b74ba2ee603594a9f084752c13fd","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.9.0.tgz","fileCount":140,"unpackedSize":212240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgJDDCRA9TVsSAnZWagAAvzgQAIbkRsAaBd3xdbbap0q4\nX8eYgoBwRyjxSHwkJkl95ob0CAr4ADwtV+Oc+Vdq20np3SvPWoLxRcesqCnW\neZLEmZx2tW8XGhBmj0GPE0iT8waRuWcnHT/q1AeT56vy2m3m+xO8ZiXcygOf\ngOO9JcTAnTsyf0vNXuD+CJdeRUMI8VmjJAR1YERqeffSedaHaR44m1IvWJT8\nGGf+22DRlCdDFSjaOOX6gJVjwK7egFIbkzHMzLVutqCy0tRIirP0N2HdaQZu\nqHg8ne/VSoJB5ShcDPOLHGFYvAMNurCGaAxhYvhvtl9G1V9M9lXAr5lXpHd8\n71MckG9g1rT9HsjgH7iwr79AtTCSMxWItm9y4YLIiBH2PK/2shBWuww9CGHD\nMRoV0MBZ3OpTWmGFvxv5vsVyJCyI59sYrmRgWruwJ/M5W3rj6N5G4o30tvxQ\nGo9fKCokX6jhiPB32rK66cqhwNQs44xWV9F8dSdg4rFCybw4vQPHlbbLIueH\naJlzmNbnq31ZDpiFPZOSTQLXyePjYP47c97OzUevctu/pyY/QaMbpUxVYkVm\nKacCVbvkazhLWSO1Jh2/bjUBbG64nBKFEI8P8ruCoTmJ6jxH3/LBw520awtT\nBwuCdQjwSRiYIDcL90KIf4e2aKbkwrV5ov4GDu3tvcHTjUxfQeHI8JoRVlxm\nANa7\r\n=aBMW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFXBvAmTDE7V7ECaWRTfZLSk2IkifEZfNT2hFtavkVsZAiEAmZ5DIL8SHO5w+2yTGpTiZe0QSOJ81wpe/SCfAQ8ngSE="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.9.0_1551929538435_0.14640852842666963"},"_hasShrinkwrap":false},"0.10.0":{"name":"reskript","version":"0.10.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.2.2","@babel/plugin-proposal-class-properties":"^7.3.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/babel__core":"^7.0.4","@types/glob":"^7.1.1","@types/hasha":"^3.0.0","@yarnpkg/lockfile":"^1.1.0","ajv":"^6.7.0","autoprefixer":"^9.4.10","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.0.0","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","eslint":"^5.15.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.1.3","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.4.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^3.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","noop-loader":"^1.0.0","param-case":"^2.1.1","pkg-dir":"^3.0.0","postcss-less":"^3.1.1","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.2.0","react-transform-hmr":"^1.0.4","rollup":"^1.1.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.12.1","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.2.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","webpack":"^4.10.2"},"optionalDependencies":{"webpack":"^4.10.2"},"devDependencies":{"@types/babel__generator":"^7.0.1","@types/babel__template":"^7.0.1","@types/babel__traverse":"^7.0.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^8.0.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.9.4","@types/package-json":"^5.0.0","@types/pkg-dir":"^2.0.0","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.9.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"1f94da05afc02a1f9b476bfe3d806600eab52f08","_id":"reskript@0.10.0","_nodeVersion":"11.9.0","_npmVersion":"6.8.0","dist":{"integrity":"sha512-3y4wsfD57dt4onWU/Qws0j/J2H/uxCxGPttYmr3Q9vhqqC5I9Lo9XgKt5xkTCECgwAFTCZ4z0IYK+8AAIcX6FA==","shasum":"1664a70e06ea09d919a344e85aebcbaf872b5bcf","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.10.0.tgz","fileCount":135,"unpackedSize":210724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgJimCRA9TVsSAnZWagAAkyoP/AuozFqDsUc3Eq3b2XEw\nTxyC9083uflGzGMiriLafJG2lVhoYQd17o/FjosdyjM4sC4NsD/tr79WaNOo\nzkT67r+QMrle7RgYBemA7c/csCAtpNeyIrc+5srsQ4rvEvp04rquTXW5URP/\nL+mwuYItGX2qqT64YcP4Y6yk3QZIScOJD0ilYQTcCD3ynw8+WmHf/5LLu7QO\nqmkU0YcakMyEq1Cq3C5XQUJTiMwTqnkdaz0qFgZPBnuz4xFq7hY1TDH2Q75Y\nxLFtPD90zoLzkhyWTEIi58ZhdSJldiE1JK6BpUAksEvw1ZkUS5HhydL5i9/v\nzePa9OIrWvtzj8/vNIMxI8gMKHarXRhow51e6hHcAfPPQPD871FJe/Iw4S7k\nIHNnNBZDYf74YiBRx554iWgaI2gkligSFObf5EiaUk4i4aTBUmxIKqAVZGGj\nzW3lGNr9FsJ+8eilxvozr77TL3ZGxktOvNYykcpK45xIVqwmRStJ/BSgIKg9\nvKPHoOC5kxAMXVZUSGkHUUgTbxmcQhsdFR6h3+zxvblQ4el8/LM32ajYRoer\nydvdhl8gz7hMsYhCQgmN8zAXrGyelyPh9y/VEupzjtsklIerv6l2GNASz4Cd\nWje1GcDfUFGzjV2n3o340oB4/Z9KU4+ZEDjn6+kszKid0elhOvggkhYug75Y\n4wjQ\r\n=r0w5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDe9ABKaXXMfL0Jb8y2Nljb0YE+oKq0oEAzuc/+dwxhpgIhAJa1Lc3OrRiZnR0vvBqsf5wIVTz/dbHKWjJhxDrT8ypc"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.10.0_1551931557448_0.3336976164245469"},"_hasShrinkwrap":false},"0.10.1":{"name":"reskript","version":"0.10.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.2.2","@babel/plugin-proposal-class-properties":"^7.3.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/babel__core":"^7.0.4","@types/glob":"^7.1.1","@types/hasha":"^3.0.0","@yarnpkg/lockfile":"^1.1.0","ajv":"^6.7.0","autoprefixer":"^9.4.10","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.0.0","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","eslint":"^5.15.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.1.3","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.4.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^3.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","noop-loader":"^1.0.0","param-case":"^2.1.1","pkg-dir":"^3.0.0","postcss-less":"^3.1.1","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.2.0","react-transform-hmr":"^1.0.4","rollup":"^1.1.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.12.1","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.2.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","webpack":"^4.10.2"},"optionalDependencies":{"webpack":"^4.10.2"},"devDependencies":{"@types/babel__generator":"^7.0.1","@types/babel__template":"^7.0.1","@types/babel__traverse":"^7.0.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^8.0.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.9.4","@types/package-json":"^5.0.0","@types/pkg-dir":"^2.0.0","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.9.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"eae6e43f84c458c28d9c181a303c38f0353a37b7","_id":"reskript@0.10.1","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-r3ZU3yEzbGx4YTSPzfssGflR7ckwbHzENuxvOML4hfIbwgf3274YJSVhJoCNWKT9jf9oFp44KR/f594rIM+4aw==","shasum":"d56df41643317ebf604bb51db40cc1ab2d67e51d","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.10.1.tgz","fileCount":135,"unpackedSize":210885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgdD7CRA9TVsSAnZWagAALDcP/3dDRZ21a3WgKjO19MgP\ntBJU7zSgKVYwWwHPrW7pvxi2cLBQX+4b0UcpnYDRgqXZvZc4aD3PStyjXNs1\nrgihsfFz1BodD4RXv2BaXsnKDRJywjJojZQ5+JR8j85aYJcs4yOHTuqQMpvX\nFGqvkDhIMicfuUUMLdRwEDukFM2WIUrrNzWIGqHZtcLQtdXEkDdY0WGEfe4N\n8APYK4qYs6xs9EBZKcGU3fIYss8yuJAoT+4FXvrIZ5TajILr3TgaQE9f9i1O\noOnzpL6oatRmMZC6G0HKJT4YD+hiMwUjz25bEf3smR5Z/cXY4JqxSridAlpG\nuTbXcbj/5ysGNcsCrtodNXAwTVsTRzAa+0JbxE9qitFbWeSgJRP5EG+VaiH1\nHFeoxIudJX2e0uSnWvfO6sBsAmjCicU0XI+Tn6J5mR5T5zTLsUyLL9jg2uo1\nE95mb1itC9w29cF+w3kobAlQXN9UQf+kxG8kE5WfYAs3xP1NfSbcJWumElyG\nAhK5sUdjLVXXI+CtyTQl8xhlTZzbcVcfSL7uHZ81rpr3GpIy7/2E+sqO4hw3\ndXV9v3/3FxSTCRMTP/h+so3Bk68foZ1jc7ffyU8vUcj6LAWqo88fxSIun2P2\nI++Bu8Zh+f4ZAR2vVx1E24OufRzOmJX4LN1CHGwJ1z9nSRE7bIi9voNtTa4t\nY7Fr\r\n=I9QH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxnuBDh7TeOi7uFaiLv+fHcffd0cAGIpgawvAGNB/L0wIhAN03y8OjGk1d5bAXrdqyjPgseyGsfjgSrP/JIBOV4N7E"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.10.1_1552011514782_0.5196730611911888"},"_hasShrinkwrap":false},"0.10.2":{"name":"reskript","version":"0.10.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.2.2","@babel/plugin-proposal-class-properties":"^7.3.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/babel__core":"^7.0.4","@types/glob":"^7.1.1","@types/hasha":"^3.0.0","@yarnpkg/lockfile":"^1.1.0","ajv":"^6.7.0","autoprefixer":"^9.4.10","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.0.0","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.10.0","enzyme-to-json":"^3.3.5","eslint":"^5.15.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.1.3","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.4.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^3.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","noop-loader":"^1.0.0","param-case":"^2.1.1","pkg-dir":"^3.0.0","postcss-less":"^3.1.1","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.2.0","react-transform-hmr":"^1.0.4","rollup":"^1.1.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.12.1","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.2.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.10.2"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.10.2"},"devDependencies":{"@types/babel__generator":"^7.0.1","@types/babel__template":"^7.0.1","@types/babel__traverse":"^7.0.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.0","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^8.0.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.9.4","@types/package-json":"^5.0.0","@types/pkg-dir":"^2.0.0","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.9.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"355c6372973337c217bfda1581817183919f2107","_id":"reskript@0.10.2","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-OTTPXrn5Fz9YqK+HOCZlJsNgUvmStjo5rLOHxKvEjK8gVmPjIz3GA8BVsUSUBFq7Gnv46ClRb5DRFkZEqTTqjg==","shasum":"a3ea9781dd8e4b8c2c2912773152fa2230efb737","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.10.2.tgz","fileCount":137,"unpackedSize":212487,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJchfVQCRA9TVsSAnZWagAAy+IQAJUb9gq76oXUliTV9j+l\neaxs8SdizAXWMw07+fqlXuM060boh4ye2wsH44I+nBx8dwLZdMkVmT0wd3k1\nG9+dNOAiF+xObp5Cd2kNjwezr6oppPAcCNn/0OnGYI2/p/rw6r9sbnZek+QJ\noBRv8N0S9Bja5P+2jPx/JemajHplF2Y/l94ucWK8sGwINXt20i1pvI1nATPn\n0F9qgsYCPMoh6ENCB0h3eZ6k++6Lpe2d381PKhvTziU5gtjcBbmtm/Pc6n0L\nnpP1I/8r84IPoOc/Ei0XRF/pwYsxPZNDRRMmFjuE5QCS/8vz2dDiECwDSrGi\nplfY/PZMnQ0oh9s5Oo7dyi7evgKAwtATNlap26q3g5lBLjK2e8Xf9cPGpBb+\nDCYeAESHnryQGtkWRORb7gES2xZcBGsZIpGNTENbADNKwlZ156eYHFjye64R\nYVaKQxlsUseLM/g8PJNSqe3md7LrWpX7L+E+MB/XKW81Qi1wVUWauWn9HGjx\ntLp9HkVJWI9u+aGDG6foo921VeQ7PV14EYVr9AWRu4F9M/ux7/Fymi9kduEf\nD7AA8edipwhmCHDQTssyMI2MZ3Q5+ZgvgYYaFTNeP6eQL1CC7K1YsGcLtSQr\neiOWSh5+1P3UaYQpZ05NkXB+HwSEI5g37SYttq95akESfXsou5CwVkYaAXFt\nmBUw\r\n=Q6vf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDjMqkKPI2432S6Pc+OQJl9GNJ8YRMOU0vu/bOXi2HfgIhANB32ZDyetLTYuwKAJyUQwi4XeAOK3HzkP4XKHKsjkhO"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.10.2_1552282960222_0.195685001934764"},"_hasShrinkwrap":false},"0.11.0":{"name":"reskript","version":"0.11.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.2.2","@babel/plugin-proposal-class-properties":"^7.3.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.3.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/babel__core":"^7.0.4","@types/glob":"^7.1.1","@types/hasha":"^3.0.0","@yarnpkg/lockfile":"^1.1.0","ajv":"^6.7.0","autoprefixer":"^9.4.10","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.0.0","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.0.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.10.0","enzyme-to-json":"^3.3.5","eslint":"^5.15.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.1.3","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.4.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^4.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","noop-loader":"^1.0.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.1","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.2.0","react-transform-hmr":"^1.0.4","rollup":"^1.1.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.12.1","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.2.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.10.2"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.10.2"},"devDependencies":{"@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.0","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^9.1.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.9.4","@types/package-json":"^5.0.0","@types/pkg-dir":"^2.0.0","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.10.2"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"ec6cd56d7dd4fa17287d38f1082008cab05b4bef","_id":"reskript@0.11.0","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-gXozd6BFabGgNYPSetG9frFmtaafXG6iiG03ZErXUQko3epvIe6MKaY6FxrlPF7CLQAnT/Pt/EG/z7noqt9dmQ==","shasum":"68743a2277eaf2bbe21b8e04afa48fb9f6d85f15","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.11.0.tgz","fileCount":156,"unpackedSize":226848,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciLmcCRA9TVsSAnZWagAAq9YP/iSsx5c1mb9FRSko2bHP\ncoCMSBQEBE5EWgAOoTOR1S2mNY53OSH539ld1zdDZVswvBvYMn4pfzgGfDkY\nZdfheSBAZnHcGLwoSOjaczEbUwsH5j4Vifv7pwKn9Fmu+Eq3MLjw1/mO5pyG\n5g3wlxu2X4hWkXu7AaXplOCOtFHp1PAHnTbTc+S/1s1Dgsk80uqh6AWHHfed\ncxkljrjsveDdOphtgTgiBUIifH/1m2DodqwK7yQudeldLzMD4s/SvkrAuD8F\ntlsHe9bb+z5+T2X6Kw97qd2iGsOggLWth8GIuD7D7/EUjVVuCi4E2MWJCzBv\niCloOa4sDE4QNgSTCZdPtyBxq+7jrSd5v1VjPF8aT5j9Wk3t5QA1JUVB56k3\ngwLO7GT5gjMocKC6l4GwiVHMJV/33A9pVPI8eGRBbHAvVcBuwJ7qZprVB4Gg\ne6gZJo7h0AsDqFIW92bCyt7WOuiXC80E3HHvGY09gRaysKfX/b9HK4K8JEj+\nTp5h71Ly3Nai6cq3rteigO5/kxHrWDjMuMPk4N3qgJkilFP53n14SMBS+Chr\nVRHrL/E1cIFyFAWQg7QPOYLZZ5kuAQ03dP270ue7/tPYTVvYnVJyrRdYpBuv\nkaiPRgsun9Ekb9YmOGpDlGJqWlL0CwiG4JItBl5Tf9ePFwze74VPPEPl7YTv\n5g4c\r\n=07hi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBr/5rMXos6ytRVVxQx4eM3AEKTYqgQtQAvQO9HJPhTwIhAKzKsCDOYai6KNDAmGp78fgGfATveJ/rGt+1Oz5jrgOb"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.11.0_1552464284115_0.2581139096119176"},"_hasShrinkwrap":false},"0.12.0":{"name":"reskript","version":"0.12.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.2.2","@babel/plugin-proposal-class-properties":"^7.3.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.3.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/babel__core":"^7.0.4","@types/glob":"^7.1.1","@types/hasha":"^3.0.0","@yarnpkg/lockfile":"^1.1.0","ajv":"^6.7.0","autoprefixer":"^9.5.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.0.0","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.0.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.2","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.5.1","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^4.0.1","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","noop-loader":"^1.0.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-transform-hmr":"^1.0.4","rollup":"^1.1.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.2.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.10.2"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.10.2"},"devDependencies":{"@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.0","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^9.1.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.9.4","@types/package-json":"^5.0.0","@types/pkg-dir":"^2.0.0","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.11.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"c881fe5a9dea12217fb32c3ed414d4cdf68521a8","_id":"reskript@0.12.0","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5oY9ZJqKIc4cUWfG9Bq5/P9Afwdz3LLQTk/0BNwlEq3cq0lkOXEUlwwsWzKV1CGOSQ1y2T496V66rYVDUdzJYA==","shasum":"2fd895fe2ad73003ec90437172deb45be3cbd19d","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.12.0.tgz","fileCount":154,"unpackedSize":221254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj0Z4CRA9TVsSAnZWagAAnZAP/A+3eTm5mq/X9CUgr/ka\ni3Y8PSDODIZ8hWTSdM4GL11o5Hg3bXuHkA79TRqrLlYocI6zBhaTaNVWhn0E\nAuyL7ifRBd4QHrQHLUT7294WTzoFXail+G2v3hLwhVlE9O9/KuB13cW9Ribo\nHbp80q/7RDgXvEhkYek2fgPr4o2kaKcL0yrk7QZFqsLn3iGNY3RwDq73m3FT\nKNbYF+/DnXX0b9viHZ10TPdwDLEttM85ggIsywIZUWtn6CmztdCO9akXTZCC\nL/gOjMjPWo+N09tqBFegUdwcuAtcSY8195WBDXbf8OM33SLur3zGG0gRgjeG\neWwvl7v2ISd7DEJdcYXavWTunCi5zFaib+9Rgwz1pHamL/7pp4isKb16HXfM\nwNhXSGk8OZCCJ7AhxxnF35rAhCdpJBT8bT7M+5bjbFgs/YraenfO90tpfxVS\nykEMvRvcyIRrhScPZ+i1x7SJ99OwA3dQDvA4BR0ab+5PsvTHD/w/TuLQK8er\nOj2NR+VNrPIqIRXq7VntjEon3KDklQCO7h4g5IFGK+NpALXj3HVqxDSuXGXu\nfz4UW45wqh9Dy2RgvDa5t4QqQwxXF7kUB1Wt6Xryn2E9uA3laWzGg1rZL/SJ\nzfeTlyrnQdG2YdZyxKy3cU/DaNDCo/JT6ACHc5ZolNofRbtD8MmndjfYkDfw\nxq/C\r\n=PS3A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDVBunhPBeHWdNKK48i3H6/2YFUsGcI7V88QHikjCPAjAiEArdLqrYLkJukjdnGkkVciAAn4Y6ThJtKeF88G96S/2vY="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.12.0_1552893559576_0.8508101894062239"},"_hasShrinkwrap":false},"0.12.1":{"name":"reskript","version":"0.12.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.2.2","@babel/plugin-proposal-class-properties":"^7.3.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.3.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/babel__core":"^7.0.4","@types/glob":"^7.1.1","@types/hasha":"^3.0.0","@yarnpkg/lockfile":"^1.1.0","ajv":"^6.7.0","autoprefixer":"^9.5.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.0.0","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.0.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.2","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.5.1","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^4.0.1","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","noop-loader":"^1.0.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-transform-hmr":"^1.0.4","rollup":"^1.1.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.2.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.10.2"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.10.2"},"devDependencies":{"@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.0","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^9.1.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.9.4","@types/package-json":"^5.0.0","@types/pkg-dir":"^2.0.0","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.11.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"9b392a2f1b6f054671becf01d6734bb909069c90","_id":"reskript@0.12.1","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-rwE5ERU+GwdDg+pBOQgvyAt7Bdpkazct7uYDLBAAzwwEewOcxupKz5JASfmFiq2QOY1gA1bjuzN4XP7fs0bM3Q==","shasum":"55927c499ecba464b88f3c66d8a53118c6845dad","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.12.1.tgz","fileCount":154,"unpackedSize":221367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckKcPCRA9TVsSAnZWagAANk8P/17jrk3QtfEebE/+Rf4c\nChhO31PhyEjwS5c8ej8QNSwiWC+jjqlSDhM+yV950f18hl/FP5l9LJ/txklp\nM5k65aZCTJr1s1pDNA6+HDRuch5c9aNZNaMwWTVODpAv7y/1yVB02YzZWBKx\n4q7omxixkz7FY+AsjxYtUw4BBhl3JzT82CiNO8zZwdaddplfD+vmcxQvSE/h\nrqcCkbJlFIuj0eW+jApCRH6AaykYKIqHtK1baozrautFekmrQTanaRFKCXqO\nXCfk1jf0ttN9mseqgA0CPaA+WcTChbp3YBa1/0YD7x2hONRLNBQ80+9jq30i\nxD0fgy9Ge4H40HCbkr7giI40fJ3cw46J+UPxANW6Z9d/NeZp8z1/Ov1/FDEN\n/LMIwciYda12lOthI+v0AV0LkB1R/C8ohZnlc+Z3r8vyRierHKoU8EGrDMtX\nFK/T8M0nUyLAZXoRL+1qrVWTpeQhg8CIC9WneaHxJ7zZSd4RuimaUBTkDWeu\ndmO8lvRQ0Fj7rGFZ2Ph1vAMj5qkm0nnhJ0aA760NYyx5uimjxCOlTV4UJqG3\n2fogobW4qeG+rIfQJtIUe4MRXwnEEk/Hi7sTddIuDZCsUIefgR/+oRnUDhRO\nlbGxAghBQjbeXwLavIPKP1jHe7kGBdBxhnrSDCYgn0irAviHGJoirJk8G+gI\n5FJG\r\n=pZSt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG6t+pZd+Yf1ZHZqZqUIqzcc56G+LcZElkE4+wGN88x8AiBArBj3AARKVfuie/3MSF7A3bTcBX8b1L7gt/KhiSK26g=="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.12.1_1552983822878_0.19965565917881767"},"_hasShrinkwrap":false},"0.12.2":{"name":"reskript","version":"0.12.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.2.2","@babel/plugin-proposal-class-properties":"^7.3.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.3.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/babel__core":"^7.0.4","@types/glob":"^7.1.1","@types/hasha":"^3.0.0","@yarnpkg/lockfile":"^1.1.0","ajv":"^6.7.0","autoprefixer":"^9.5.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.0.0","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.0.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.2","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.5.1","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^4.0.1","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","noop-loader":"^1.0.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-transform-hmr":"^1.0.4","rollup":"^1.1.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.2.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.10.2"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.10.2"},"devDependencies":{"@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.0","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^9.1.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.9.4","@types/package-json":"^5.0.0","@types/pkg-dir":"^2.0.0","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.11.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"566067a8d401cdaa0a973fc17e09ea05e66b51e8","_id":"reskript@0.12.2","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-6+YLZHysoCqwWOSz8crEe892U5jS1lXpet3Xc/EH8+tKBFjOsv4HRNAURK5fIs1PY0cupJ9uW0zIchfGZ9BUKg==","shasum":"6073ab962b5e43dd382ccc393fdd2d5e23ffa314","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.12.2.tgz","fileCount":156,"unpackedSize":223216,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckz6UCRA9TVsSAnZWagAAoPUP/1oMsIx4LvdUC3jNMHF7\nCI+1Mz4hvFAI7TRnQvdnlCOY9BRE+m5kSWmFDl8vgUhKoEXThNUmySqlvnvQ\n/rRZdlkefpljweuF17dUMCMsGM75DVkqUG9rE2GlIzz0WLap2QsFfhmr500g\nu/rN5YL5QNDlsmrjL6Nf2f7wyElpzJDUXtFHvHzxn8aj0CUscxuh9iV/ZB2s\nWhusx6+Bes0RJ5U4xgxOCgZHhIKSMifn/fEJg4dYbeSXhWEhBCfCk0/ADu6/\nwRShJV94Ay+0i/04m+Ao0NMYcBJqqcILb6LFAsIiXzaob/VgPPUA0CZclyZP\n9LHZQgOqeMo1Gfw4fGYeFKBiFcGe8/jrlMf49r04gG1QxLuhKI17tKoCeQkP\nLXxg6lD1voBKUIduIqKExOQHbzyTVgQZm7m9RT8OpfUgEUJ6XgRQPjrr+gJH\nJCvpZ/iRZIUMPfK2K54tGIWB/F4X0SCiS6YBfWw6tAiNBiKY6bxZAZ8lRSPJ\nTJrcLoYFoK2/5ZxZk1+PiPPZ/oZQkEzdkvFwXEs02+HHGcxhtt9etIhlvdTV\nKhC102zWT+uqtuo+efWaLPm+PWepIY7vwPsvM+NIY5E7TCot1Cs3BnVIjo2N\nTLXNG1UmmydjSjbCVokssetpkLPjMNDZPXJNetmZq/Yd0wtwnuK/BTq+RTdC\nk7gF\r\n=0kpU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDrn6pX2oYVBBjHPe50tEyBcgpB77uHP1gqsSVn/YI6SAiEAyjP3ACA1/GIw+o8zDDGN17eF3aCMXPO0RTZCeipk8cs="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.12.2_1553153683690_0.9101372678793571"},"_hasShrinkwrap":false},"0.13.0":{"name":"reskript","version":"0.13.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^4.0.1","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-monaco-editor":"^0.25.1","react-transform-hmr":"^1.0.4","regenerator-runtime":"^0.13.2","rollup":"^1.7.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.3.4000","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.10.2"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.10.2"},"devDependencies":{"@types/babel__core":"^7.0.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^9.1.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.11.5","@types/pkg-dir":"^2.0.1","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.12.2"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"e48c88ced59d06f7544db5261045ee12524a7a11","_id":"reskript@0.13.0","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-zaQHZswsY8SoLuTgFEJLDCs4Doh0193BREPdl3LOr1lo7TQISIDPz1uIj2ZlOMv2QoaCw5EtMxC4dNFquwqY1A==","shasum":"0bf36d3f26027dc1c8a0fc33e2e23bd2914f33e4","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.13.0.tgz","fileCount":167,"unpackedSize":244267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmeGfCRA9TVsSAnZWagAAkk0P+wXF8M/MTI9XQ7uYxr7F\nWYRdevn3ff9+dyVH/Yn1ST//LKGqo1bI3fmXA6s79V0IAV2Hg922K/A/90Zv\nDYuRZUoB9k++NU3uhenCKece5HeAZUntIntOLW9UfhG3UFsr+fHFEDNVLYxM\nU0LSWcHYFDDtC27fzTUsHyFckoWUTjj8ejfNEsVVnflmaiKFy3UacQR0ZbZW\nCj2yw1Uhne9uHd4k4wulZahYekVhCejU6YSGCOX8h4M6EZ63Gyvk+Q7s8C5c\nvjQQgG1ycVxz1x5d6eYms/vKsl5k12vAR85ImtVIKOskaNfONTCPA+CxD4dB\nO2gJU81UUYxiwlKE54URALCu05puzoripxw2UYtFt7Zo3ixQlSuNBSY3tacy\ndU6FpuqG3hiBvmcqbCveJkCSofXE8548BtNl3264TU3TvL0dpLEN1AMNvUfx\nChOQDtsJkpxkO5p7sJ/HI0Gduwso6QbXHDcNYr82Pg7CZVQTOJjTJLyOK997\ndPaKh+LfBMDLntfdFOeK1BO+EIJkaPBje8XT6FjAjWuH3OwFob871Vpx7uUH\nCAchCeOkOH3SVSgGTz+mWuMIwiBagdEHT6V3CO/FwGrkMWTOyqh35Fnod72C\n4n3/VfaNoxpB8qe9D8AlYeHkvHPa3EaTeAsW6T0WuzlXTWUIPbTFV9eqz9rt\nVTL1\r\n=otB6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICLrI/K+5ab6Hu+83r0rGyODLUS81KAEM0YHtEeq5eK1AiAY3KLdEfebNVHUCR53XDwDuydwFl40m6ubdZDxHhXuew=="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.13.0_1553588638233_0.2469046336916758"},"_hasShrinkwrap":false},"0.13.1":{"name":"reskript","version":"0.13.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-react-transform":"^3.0.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^4.0.1","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-monaco-editor":"^0.25.1","react-transform-hmr":"^1.0.4","regenerator-runtime":"^0.13.2","rollup":"^1.7.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.3.4000","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.10.2"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.10.2"},"devDependencies":{"@types/babel__core":"^7.0.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^9.1.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.11.5","@types/pkg-dir":"^2.0.1","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.12.2"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"55ddc2fe5dbd215be399c38989471ac7110873f9","_id":"reskript@0.13.1","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-E3WVrNBUa2aYNlOfNg6qzMHcRx7unHb3NMMeyabKzZWnhBDIoHBZmSDEZcLlyxFa5rpANMmJT91GCyHvcQrd+A==","shasum":"94ced78ca6216b70b0cbe5367e3ff73f3b6391b9","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.13.1.tgz","fileCount":167,"unpackedSize":245676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnx9ZCRA9TVsSAnZWagAAiuIP/0nLw6doCUkM86cYxeK/\nVecbTrVYNzoDJpp4730yL6gnsO99V5U5d/9YXWghE2qep+Ez2zG/7hwujG0f\nOMleXPnKFzCJnULKBBSpN7vsn9ALJEHDi1XT/H6WIAH6D2NU+Vid5/VCUicA\nyB4QFNuffxEEiK1w6Et7uH6jwauQ56aYuacbC8b7f+mEK4d7qLN4oxz2fG3V\neLPYbsLWgTsbFMOEcatqUwLCKsEls7KW58/br/xr05gQnXJexJ9nTv+H1soD\nzsGbQ69MBE0BmKYnt8mh1Jmdty+/02K/HYXdK9x/XvUgyBVugoX3ABgza9nJ\nO8Kszc7FwKC0dDTXexPE9TdbjbedF72crRzc06JChMd+wn5VWdSjWmiEJWXd\nt46vPy+ZVgcWNuDLU42++3hOF2DdWDnydavEhyVqLCvu/2PFLi8et7WAT2zO\nlVkN6Pzu+hnvmkX7mtyccNc2hhcs5r0tis0Kvin6EVY+Hh6dRHMUNTQQDKbP\nMyYuGYqjZLRzEm5X8w2v+3aFsXYbiFbNTNsz0raxT50S+nz7xV/7ZbYyY0i/\nQSX6UQMyt07LCpj/p4QSgmPERJvWAvl2QwgWLnTPvh71al+GEwhz7aLCOWno\nInWugpa5SLdjuGOhj5k6y2TkrvFKrZqXtipj76vItrr/rHZWG6P1TI3s9ZlS\nrdqU\r\n=esuO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHnXYDyEBTwsYZtCtBm8owc8PBjR/CjmtBOg1ar9Wxu7AiEAh58P1e9Gk6y8Rcnn3JdOaVdV8VUnByBvokM7cMmlAMg="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.13.1_1553932120097_0.2735498255850337"},"_hasShrinkwrap":false},"0.13.2":{"name":"reskript","version":"0.13.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^4.0.1","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-hot-loader":"^4.8.1","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.7.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.3.4000","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.10.2"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.10.2"},"devDependencies":{"@types/babel__core":"^7.0.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^9.1.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.11.5","@types/pkg-dir":"^2.0.1","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.12.2"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"907f4dbf1c014d2cd2a03b183097b46a4d7fc8a6","_id":"reskript@0.13.2","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-QLRcQTBHZ11pVAXzj1vJ6jDNunhsDipx0fOD3kZlBlRXCBxRmJs+UK++OH8vs5qFYEUjC6MzDMhf4gu1LY0oag==","shasum":"25526d44945ffd83230f5476e454b0178934e0ef","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.13.2.tgz","fileCount":167,"unpackedSize":245474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcoNI3CRA9TVsSAnZWagAAL7oQAISrR9jKJ64wbVHmW9u9\nYDgj+m0PkOGiFGbmzisx5iEWaqcP3Rx/jo3Va26fDMngNTtgbeBLPI5gJH6H\nyX8OJBOhyE8e7iLh8ztmN8nYrrCST9329yYZNCueSWTw1rTmz6slgblhnGYM\nJbgFCHfIHVjXcHvX64HRgzywI/ptBuK7IaJ5UgLEGZmtxlVooKzPsmR+094X\nmQWxPlV0zB5EGNPSH0tWAoVTkq5yJdK7OA2Y5IseUeMahnXYkqYyBa5+y7Fa\nyV8u2gpH5u/eN4di/1Ys1XuowT5xgPK8bJkMVfjoHObF6VIVmhH4CnuW9Olj\nwGTOsPf5XBlUNR9bKYW7EBj7NWqxSBFjUwB07ZrzSv0o6ILbjvxFQtXkwoe3\n9gV42dE5iPHs2KM7znRtv556wBDUcp5YoEzYtGjRcYzgXPKuQCZt89zdu4xE\nBJtLyUdWWa7Rm+jC5er5COBYqaZdi2YL2OdOzRtzYbG/GsCn6Y2wi0wXJo17\nrkEQzcp3MByV2Dw5FDAIARvMZH7Pw8u5Vab7gyOYcsvVLVUERK8I4Ohy1QmM\n94so9g2JJrzqoRHVz9VYekaXwZNxxXEZZDJYyis3fpctMx+cjUN81B4myWVy\nnuDxL/F0k7w45tyfpxf+4R64yVTwXuI0qUyv1/sA4t04U5EtNtutSBtjiogM\nY6hl\r\n=n+BI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBsn1nk6p5uYAAmFzICsTVJ4lO3vhPDmeUXW/CrDdR9YAiAj1VayTkE/qTiHfbDwYVmwDqHDI9twPcdHgucEDSk7OQ=="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.13.2_1554043446138_0.7938041107237936"},"_hasShrinkwrap":false},"0.13.3":{"name":"reskript","version":"0.13.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"sh scripts/staging-test.sh","test:typescript":"sh scripts/staging-test.sh typescript","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-add-react-displayname":"0.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.15.0","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^4.0.1","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-hot-loader":"^4.8.1","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.7.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^5.6.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.3.4000","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.0.3","webpack-dev-server":"^3.1.14","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.10.2"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.10.2"},"devDependencies":{"@types/babel__core":"^7.0.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/globby":"^9.1.0","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"0.0.44","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.11.5","@types/pkg-dir":"^2.0.1","@types/query-string":"^6.2.0","@types/rimraf":"^2.0.2","@types/semver":"^5.5.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.12.2"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test"}},"gitHead":"1f7c9a6df8be74d0a4149b1fe3774b0ddfb32721","_id":"reskript@0.13.3","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-IxqHgoS+A7LQ25EntVDeVxLe0g9/xA5ftgGXj99tJu0wiLxh2wwdDvxrKG5tktVPWDuR4KV4tcJA0zIP//1gNw==","shasum":"789c282b50f70b30fce0fcec0dbf0f66f4391398","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.13.3.tgz","fileCount":167,"unpackedSize":245554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpDw7CRA9TVsSAnZWagAAp4QP/3tUUtHQkkUX9/zfF2pW\nurXzg/prcGJyL4LGwzCxotZ8nNggMxAZsFsvyZNahqpjGTu2ht9EgwR+b8RU\nCDIQkE/EoYWm/aHoprFyDkIk5o+qXOrQakiZc9a2fNK3UiWrbhiFQ6NE80eP\nOOLpsb+Cv5DVEPIAON6Jhn8Ptfxy9FbPBGFPH35IovG20B8axpxyPGgP1xlJ\nwzrrltwXaSErXP7eT9UnKn5mATy8V1/bgnFb9fF0xqBnVpKKneXGFfWtZ6K6\nVUOo4VqyzXHAoYWOlP5nKEgZ0ltzguRbkNBCMZBcBIBCugHz7fp9Dhj9msUq\n8A3a/3/xKqDKvCUTzhXKIUyNY7GrUtdnLBxhJNUjfM2nyRqHRtLU6ij3BNrX\nbQGjZTdv1UYqqQvOIRy7HYUjEXLqlPDWtBERiUOIIdvq0lVLy1nAjlrQEzYT\nzQrx7vIZCYLW/dQYtqFAqCMwz5STQ15Wp8qTBB5sVfLuYDV0SMxzCrjsN3qL\nmj4BKDf1NikfOWTWcXSU6s4RaeYaWrLXbDEGU4ZbiZzpK9djs5gniedBgH/d\nnsKVNzrJBRWkCVWTXa0xmMkrOEhRHmehdbSNAdE3ifI1D+ZZ6bpG5BB5+wKy\nCYytVxWgWDiB04vPLarBPNkkyCEUwqlbZ+piJL8fe2nN/8jBaa/WVTwTXUYe\nOF2s\r\n=4Nfu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAIngWT9I+DW9zBw7j1sl3P/TQ5OD0PYbQ80nWrGt6eHAiEAv33r/1vLBdzYFLgKhq4ezlYU3SpnanoRqCHBEXmY7tM="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.13.3_1554267193769_0.3482137440557389"},"_hasShrinkwrap":false},"0.14.0":{"name":"reskript","version":"0.14.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.0","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.0","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-hot-loader":"^4.8.3","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.10.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^9.10.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.4.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.0","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.13.4","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.13.3","ts-node":"^8.0.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"d484ccd35e93a36e97a9f9f7cfa8917fdbfa7721","_id":"reskript@0.14.0","_nodeVersion":"11.14.0","_npmVersion":"6.9.0","_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"dist":{"integrity":"sha512-J+Umc0uY7kDTDRtUUHhwsyHkjrcOm8UlYKmK7R8HZmw1/HkQd7V72+eZU28lFSK66HOvH9nh5BNZUqGR7QbOOg==","shasum":"d0fb825e7d10e55a67857cc57b7222a4f7800dfd","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.14.0.tgz","fileCount":175,"unpackedSize":267534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcst6zCRA9TVsSAnZWagAATsEQAI+y0aSfeuKM/ElOExTS\ncLPrAc3+NhrTc10KKB3+rHfcq9exm0f3zjIOpGmyD/9u9Xkrl0TR6BUxgl6U\nRK71g85cEAAe1iORIeYbM09clg8C9LrwogD49CIkvi+lTQnQKDfvpBbcn10z\nlrVSz5e2B7+B+IbwAvRBfwQ9KomtNKQaAyT85scO5+3k5yfRz9Hmr103GCzJ\nXtt6/GlgqcnsMGJpHYsfj++tlYU1JmNJ35sbtGSq4q1WkDcXHnjRBOTEAFmh\n/Xc4VWSCb/tEDe4E2nlID1VKoH54yjqTZm74wYK+g6vw/Mh7M65pZSvGWqxt\n5MscPGSwDomRGC/84/a4eZSe2qwZW70EBcOegOWySCATreAk/W41MGU/5vNR\nYvGsdRTxLjOuXgVkxd8jN8tbYqaIw1XrKliFumXB91MZz4TsS8/IBHdMwMJj\nd6RngkLllV1Q1b+gpQg8/xU1R+dvrp+DWViSRGCmE8kVhcLPcb/k2gipS+kP\nszTr36ZxyihZ2PhJTXxHPOMY1dQyXXez+kkMB0wUr9arqyNBJ0k8y6iY5rjK\nLu7AOq6h4gZkxJ0J0VZs2SzFCTek0bAoZ/2f83pje+qXK52zwLXUyoyizxRZ\nEOweBf9ZDTmfCaanXNsct9O3kmo4GphbMLr6D5s/7SKO0jnoRGT8+3Wya6g+\nuOM0\r\n=GjFL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7WaMS0bWwyeQu3GkfhnAumnRTMjVn1v0CPjVCr6ox5gIge2d4hreCeEgcWW2HOX7QbnDXU8D7KUnvgwTe6wBq05M="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.14.0_1555226290907_0.17049850850787585"},"_hasShrinkwrap":false},"0.14.1":{"name":"reskript","version":"0.14.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-babel-module":"^5.0.1","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.1","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-hot-loader":"^4.8.3","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.10.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.4.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.0","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.13.4","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.14.0","ts-node":"^8.0.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"f87287780b3b6ad3240e15e154e4c0fafd4d3c73","_id":"reskript@0.14.1","_nodeVersion":"11.14.0","_npmVersion":"6.9.0","_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"dist":{"integrity":"sha512-LRX989wa4SmwlRxiO77Xenl1GS0hG3ThkFRoRDkMBdLBcmczENzWedbk5B0FT5ThPkBkkPZQDQ0oT/mZbR/f0A==","shasum":"69bf23a96ba0e0d2aab232405ea84258d57b565c","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.14.1.tgz","fileCount":175,"unpackedSize":267712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcsuPWCRA9TVsSAnZWagAAV7MP/1DesIc8hxnE7Ipb8Z/P\njm219d/NBFJRBpBRfTejpEDpTcJg97CqY2Ny7qjXjLSqODaqwWvzRHzSMLYK\naMpeWlEEBFodujNE2UwPlzuQrFqLAaLQpZBTyhzXvztTAr1M+I2wupk3rgjj\njaycIdkseLqhcXP81zP45tuxY1OJGhHGk7PfEcTU3+hpSVYmyYuR3gXPCH1H\nyk1IAdl61I02T4+boDtyPIdnamS7TOWxy5LTAUAcRnZ5cglD7KDYCR5shor8\no1G7A9AEmIDZJaf+V+W6jvQaqoHCRwYlVaMHTWzQ/N8IKFiB5oVt/e3Y0GqQ\nRtjrK4C30CH5tAAWt7oWn5nrBEv4tqa99wA8v2uf3JgvPoM3gV+xsmPwFWFO\nvsU2Y+aPhJMGBuxrqlt0Icl/TM5+ZWe1LrulNJZFpp2KKXB2ED1MVEPDaCTT\ndq0AsEwclosWkUqGqLgKOQus4VV0tzC7CAbFZQPPrcOahBOnmh5HH8gDlXnF\n1e3ddfArnL1N2VJfb/j4Wmrr3A/8GgYKWm+JA5JJEHYCGx0ZknKsFBmpXWqf\n03pmgujA/vpoMZNc2cGh11MbHuzrbGm1/H6slc1bNN55cBckzeMp9hNBES8I\n9z51P9Y9a3e16Rv/SYUnlLxAMPw0xTOHmZ2urjVCGXx3zK4fhKrSfWowagBN\nEoSk\r\n=bNZT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCV+rfsYJ9PZs2K21/mfDqaX7nKKRchDcSAJl0Lv6TWBwIhAPHBtZPIak0lSvSoVRI2PG//PL+kNR9G+pn6PvIsHym6"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.14.1_1555227605384_0.6348966150449356"},"_hasShrinkwrap":false},"0.14.2":{"name":"reskript","version":"0.14.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.1","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-hot-loader":"^4.8.3","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.10.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.4.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.0","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.13.4","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.14.0","ts-node":"^8.0.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"b73b3ffb933d7dfb787b3880bc23e6a9a8b380d8","_id":"reskript@0.14.2","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-yO7d8BrDjsinFc5JIC88yVuVVQpLtGF1pEa61wrkr2L9J4eU6Nu4K6pw7M3EpgZtICwx9v3UGUY2roSUFrjONQ==","shasum":"e89f7c9c005dfab11c5ade68409d216623f77ae5","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.14.2.tgz","fileCount":175,"unpackedSize":267558,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctBSPCRA9TVsSAnZWagAAAQIP/iNqcSFh+Lx85KYy0W28\nlIZCxuvkfq6a9tS9eLzvrO0xAFkeAC8WhS349VsjaXyDdtCdWkQ9rTTWVJki\nwIuDOxVBs2K1+nehQceOrvnILF2DjuMGPxjNNu3TLmJTuPqyRXlpyIUp3KPD\nUcAm+CaiPwd4Cm5K0qfAm0ZpW2Ltck/mq5+uukaJK+bN4JzgcRnMl5xSDiXr\nVz1zlGrMvo9b+P3YBazgpf+CqAlAtrVl1bNTqU/TTdR71XldVhgIP1jmAw27\nZve7+6UTnq+NMm+B4tY2uZqPOR0o33vIe9DRdzqgGSbNnmUXt5Xf6AO55tfL\n0tndOsiAmEbnUbessea9fvUJBAnOAwyXRT3luymNSmmZ+X0y/R+AmU77swOC\ngADlS4t1r1g9Q2XRvAt4lBGJCkjr7pjBXwXP0/6OscPcBHNd0BwQc4Lyf57b\nKVmtf4+J9SFYsj3mUA+LFurBbdhtslUGBT61PzfGJ8fLPKb6gPk4cg0PN7aU\nbKJzQLS38oGUYVsTgTaNLKaf+8yiYhd/x+o3lAB7ZI2JUUK4jqm1Rcc16uO2\nu0LsVEyh18b/lyzk3KBu8DqhZI8KRmTy3QTyO1RQk+hbMz1fmobI49BjTWBq\nrEpD8qCUZGKpuH6bIxmwb9IDbWJmBojBUXBCohibQ9hoxIleUJmiOBKtyMCo\nIndY\r\n=xHhe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDM6B8doXmwKOf71igD4g7tYzjp8FV6k8N7OuRhMUN4CQIgHV8vgEOK5ivtgfm8jMyIP+DM1nuZl7PkhKDwzvyFBow="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.14.2_1555305614660_0.8994291891358772"},"_hasShrinkwrap":false},"0.14.3":{"name":"reskript","version":"0.14.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.1","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.2.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-hot-loader":"^4.8.3","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.10.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.1.1","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.0","tty-table":"^2.6.15","typescript":"^3.4.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","worker-loader":"^2.0.0","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.2","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.0","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.13.4","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.3","husky":"^1.3.1","reskript":"^0.14.0","ts-node":"^8.0.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"413e67dbcb8265d7e145a6acf560c2438802da78","_id":"reskript@0.14.3","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-sT7I3kDfxZKDuz3Ll8nqsK3w2H4p09X8eyWC1/iqnFjFvUgnx63fAapcoNtBejkqzTpLN3+WHzEH0DIqZu8xFQ==","shasum":"d94855ad50a82f2a047dd564aef087336b3e07db","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.14.3.tgz","fileCount":175,"unpackedSize":268043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctBqCCRA9TVsSAnZWagAAMDsP/AzI6GphpeK5YYSJGbtp\nQvT8nESgHcavg3t3z7IB02DzKTtfhx1sC0IfCZd6GtliLcGLpzBK/+D+PbAQ\nA1OocN+UZqhEEMOkI4r97oJWvqq42URh8eRmZtfUktEMywPnnaBWS64Hu+ux\nPUCZwvkOPoFjZ7bSJRMum749ZK17AW6QrmJ7XIk7e+wp10UUv9xxbi+u8UEQ\nZBM4lbAzUVzAZc3Vtn41WJmgymsqc1U2a5VYTrb1ilnnO7zK08GAeNjpd1rA\ngfcBbif5IAuvlfAlIaPU0iw9/V8XxsdAdAfHx+H2NWpqqYQ/IYiXK3NZCUSo\nb3ERHqKbxFe+0W1Nouy9H1V5UIgJsZMheA6U30jcyPdOHuwi8rKQsDtYgbXN\ngcmfzUs1NhhlAJG86ezb+pB3i+KlLmfAMHtvCI84pAxx+XMKWWBOgV2UkKaO\nMiL7qQyUoHkmYAhqBuRYCkxG1zPQh6JriJgSRfOI5r5FfYlj737S9tcrW4I6\nokSFz6xyibWSIZA913ZXLmXLZkJ4ptwbDW2BBZQDKiEaRPzNMc3KdJaqRjYK\nHv+yL195N27NvcJ2Y2BclH5/D9YWkhs8wx2qrdvkfdL5p3e/truWs9exZlNw\nlI+KpsdpBzTP7WFQmLjnQO4graejmKXKQYhzHBQD3ozVz3JSPAB05m5zqhkT\n+zLx\r\n=HF03\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8ps2pIsQm0pX2MbKdTDg1XQAU7wOxk/scBcHWv1L76wIhAKnK7Y54W0UU39ByFcsw5WyiDfzxf+CDcvzIIDMWI2Du"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.14.3_1555307137790_0.48104205066653005"},"_hasShrinkwrap":false},"0.14.4":{"name":"reskript","version":"0.14.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","print-tree":"^0.1.5","query-string":"^6.4.0","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.10.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","ts-loader":"^5.3.3","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^4.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.4","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.0","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.13.6","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^1.3.1","reskript":"^0.14.3","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"26602e3ba2e2f37948a9cd711394da3b2374d08e","_id":"reskript@0.14.4","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-wyb4ye5bp28e/sdpEENuIo7MWXpffxxQEg/i/Tkg5Gk9LAyiJ2ArTnomUa1uj40zMiD8CEkqB48FplhwqrsxKA==","shasum":"f34701c2ffc099be378c1e40ac235186a9e2bf3c","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.14.4.tgz","fileCount":179,"unpackedSize":279288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcx+JMCRA9TVsSAnZWagAAc4AP/i1W2BlukCdqZ35aXBBK\nzXxcQG5oA8TH6MuXV5BlmT9wT/mK2PllguGKW8JM9bMpET7+HLRbBnjUzNyF\nwBUSWU0gad8qiKBj/swy8hgP/8y4BEtcIOGIo//TiL0DXP/sMHEcvUuQpg6l\nDDn7BkIvXuwca64mOFKCLoXivzKAPAsRWNNchRMdJfAH1IwPIapIrNyVsjBI\nPh5cMZ66BmWd3BMHMOvbz1wVks/h3wYIO3NiDObYRQ0MT4RNpeYJ5aUk90hH\nW8KvqalaghGIhRFVx9T8OvQktjj0ITc2mVLcmkMKrzZGaw14p4T4n3UhJVN6\nbfFRFjynLJ+pMETQG76ty48WmwjnUS9dwLPoR/xumfqQW1ebGknv6uk4rV19\nEpaLYgvdBMAA46YGogbkfaBLBOKaEaZwraDmk2CaYZTxsb8IGiIoFJCONhsh\n3VoXR0RE+ynBNT1pnHZpLOe/R4mXKGNN2ldF/Tio29opSks+mge3kGFAP4iu\nKjfoFbVkivP+9iVDDwSpP47USb1UBg0h9VRpFzyo0G8gHeKlepj7TWLYnkNr\nUiWyeRyogSpPBmtFfW39q+fb0UiaMBZ6j5eIg9MDOg+H4qM/Sq4ygTsEjVqt\n6ewRQsCyD/NxkPkoZpkP2Ub9XLZs4Oscgq2BKiPE12k0q6H5RIH5Rl1KQMHb\nDMya\r\n=iCiu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7dW1+djhiUMt41p9nEATg+U+eJh7ZxOqOh+CuHgT8qAIhAPJTh1pqXuDH8/OUkG/RAz6ilpqaGGM5e3rS1JLNv7fy"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.14.4_1556603467753_0.5677860389008205"},"_hasShrinkwrap":false},"0.15.0":{"name":"reskript","version":"0.15.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.0","@babel/plugin-proposal-class-properties":"^7.4.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.2.0","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.1.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.0","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.4.1","eslint-plugin-react":"^7.12.4","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.1.0","less":"^3.9.0","less-loader":"^4.1.0","less-plugin-est":"^3.0.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","query-string":"^6.4.0","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.10.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^4.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^4.4.4","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.0","@types/jest":"^24.0.11","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^11.13.6","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^1.3.1","reskript":"^0.14.3","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"cf660179f74fddcae019179c4e6d61d11b287ed2","_id":"reskript@0.15.0","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-qhLg+FiZBHjk6MiGJrLOCAp9TCycnZezS1LZOP5AHGaM5+J4W5bFZ6LXiXsOApzgmVsS3gHh7SAazH3L5G1N2w==","shasum":"d8279423402837d50db5eb119fe2a2330406866e","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.0.tgz","fileCount":179,"unpackedSize":282139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcz9qvCRA9TVsSAnZWagAA7mMP/j58xtd5F/bV7ue4btRU\nCWUW2seDaVXVzRcNRo5rKjpsxcGratJXKi8mCriDxsbu2xOulEyyzq6/E7bs\nNfg5B0UBSoaWMunRLlxRfRKpFSJhYxyVGZr9M2HOyzFN+wppPb+14TuF6ryE\nIoFfigpZIlFa7ilRJ9hTpumjiiT219+InnFVaqOMqcdCRDdXa0PyhhL19oX6\nLNt0jzgCBz+So7L5dL0XMWbHurWMg6AjgfWo6mHxkop3N813EtJjTArH3I+h\neCSzordo8plqOFPWFnWyw+ZBfbstHQywe8Vk9DgWdyRHt4IXMwIcPPPrD+oj\n5uy90CRUAlhR6zAUPghU68xYNfCVcsyfMNKyHnbY2H6MEiVNjb7hqxEfadxI\nRQnsfPMQ1JIM1Y7QXBVHst8YcD1P24p1HMIxvPGBcun1Vg1aJ0W+eAw1PD4L\nCNmtrRcr+n82qzdIsLfD8/RxtUYjOH3NnwNcSsA9YMr3lBPlaw/13jVxCo2q\nfoc3dIIxBliqvxid/ooYP6ng1Ofrl3BLplk6A7iTv079Y4S1VD19h162JCFS\niRAzbGg81jKhKDjH71O6moTN9/DXR/6X9xfEboDHtjzLcq/+qpTM1XqZ32nd\ngsEYdFWzMWyLtDUlgyIiZ49tfLjoKJfsIS8OBGLbMWcpbV1L1UOao29M+GFL\nb28p\r\n=Oute\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPTugMZ8C1TtOaDwEZWYlWL8jFzVpECAWlb+ekobtEfAIhAIT5tUUGHA5otmfshkbVVbRJKPlbRhRsKoIKCfvSNHwY"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.0_1557125806933_0.6389556679228159"},"_hasShrinkwrap":false},"0.15.1":{"name":"reskript","version":"0.15.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"06e3068a5d65efbc3ff073aeb5212246a570b689","_id":"reskript@0.15.1","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ALvfL0hPaFi6oC5ev5B5Ire7N/auCG4PKoxyf8JRLj5Z6O0rLVIpF0qESHiuEnv/j136pOTaitpZSH+QHYUvGg==","shasum":"be631d4fed7ce27b0fa70461f165f1e22928587f","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.1.tgz","fileCount":179,"unpackedSize":282136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0Ux1CRA9TVsSAnZWagAA+kkP/2CUFXJyw8jOHnL5YNCQ\nIBUTq1tPLirfoucvzNbBtp1t7WNJZe/HjLzSO28aUSS3Ppe8E2nV+shTX5pS\nPQTGhrLLVWyUEHxmVnBgSYNWOdGeRaxnqA9OBSLpy6S9JVlpDRkU9UfR7uqh\nPsLywiytJcZryxVgRi1Jql9t8Mjw03d0jMdTtDUxTaDm1D7lXbm9tmmHe2X/\nN3qPEFdVgFU9yg9Etj1oF7bSEW04pgZcBGJbgnkYAxkYFK5y3AEpijVdRYgm\nKIwd3tzmZzq9QugGHTtoiVTDZgeTNNbQqHabPkIG7mrdk3nCcOMOGgzez3Vp\n94XSoZ4py4PrbaBXddKslVCyFBjuEerYtBlq1tmB4Lvjkr4udxEvLoFPpyYg\nrr2tphvc8Dws9HoxJURbmjguM2Pl2tX7WAVZkwMHJlc4grRpSFBZknzxBlvN\nsCheHCLpiappEP7DoN85JSUQ7c6aNbMuvvR79b+0p4AFZkIFvgDREQDms2uS\nduXRh3hlYpXOMj2PUdal5PUK3FdQveZqIAq6kH/ucbeANnb0YD0Tfo26xsvN\nBQpj1g5RyO4lOVFtGywjg3n+WF98/Nq9wFUth8LiWFPovAOgiKZNtdU28PZq\ncxa4n4Q6ETjILyo2pPcABp1mybUakyckdRbBdM/orpq0xJi6LwIvBY7JukA1\nGVWA\r\n=1Rny\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFMEQj+/U7jdZEY9zOLBrc/BJkkPK6Tbmg98bIymX6oQIhALqsUF3nDk9PuJ995OzGOZqlgAvNkUuIHNEWeJS/X8xK"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.1_1557220468185_0.42736754105736985"},"_hasShrinkwrap":false},"0.15.2":{"name":"reskript","version":"0.15.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"332664137b685c24df32fbea34b96d5455b7cf90","_id":"reskript@0.15.2","_nodeVersion":"12.1.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lfVoEsXjD9Oa2cNapIfCkg+XKPbLyzSbk7/WUGLLObmkCbzTBUjUdrCoMXSvc/sa+SEICwyClwu1oj1Fq4wDUQ==","shasum":"3170d99c6c98f6397e7f4f39c98a0467d2fa1250","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.2.tgz","fileCount":179,"unpackedSize":283019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2UoeCRA9TVsSAnZWagAAiOsP/R7V7fDR2IKAi+3CL7yJ\nttjAhUj1RtCRXl5sLyjlCqzuBv2vELup/nsgvZArV177aGbJTr6ustiXKHzI\nXFakWdPbiKdPUfCaOqfEH7ERy5ht/RFnA3Y+Ce4Y84XuOXELVnJVJVn2fCCB\nQLXHwSO83cEgr/Xho2irVcOqsF1tHnFa1pJxduej0yALaGj5jQdVCxq3ForI\nt1aq5tH3l2To+ogZFcb9s2THC2bPDKdlWvtFqBn8TUCwZrr5UnX3CDXWQ1+Z\n/I3kVR5Dew1/VyIixlBCK3l1iWpjWvKssqYmVO9uNMT+ivKefa9jbPnhJlJH\nLVgeCwk3OKWacKWZis46zRiaMAuiLynJEh2FGnGUiKwfOW0feD2BNpkNvjaf\nph1ccJh02Gh9bIZdSied964Ut3dEkl4u5Cd5hsoL2iOXvVrS1xW3bdqkpktT\n4KODLSDDEcFQ3bDep8szW2Y1IqQcbkUqt8zgFlBTzhG/FaqWBoZghUKB/ZtJ\n/kez9290ed4AsQUngB1faedxp+6Ku/SraJYmzktQCB4745fLlGpPTL5gZDPK\nlejlnW34I8sTdA9hPzPsuyUq12mDu0w1lxS4iedPKI6E898JsZeilvF0c3dk\nnJugziZlJnbNel/ENiSmPhy3pJVa1V9oi8SpvHCcKX7PYBr5ueaekTQ3KrLT\n6b5M\r\n=ICbo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzEyA9TVZ672GnByaFRrY8O5mv0KzKKzILC48O2pGVowIhAPHVAEH5u17g5yWL23VWCI6navfvpMinGEzPj+tUqPLv"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.2_1557744157689_0.13832975952022397"},"_hasShrinkwrap":false},"0.15.3":{"name":"reskript","version":"0.15.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"9b7e82e74e189a824f11082849b8f5527385e43a","_id":"reskript@0.15.3","_nodeVersion":"12.1.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-fXA9moUOe2MwIkeQ5HSeAJNoM2qi7OJf9jQBsu0upN8s6WmEnAR8h2+APb4Gsz0l2+ZzIolte0Syx3lBw5tNaA==","shasum":"6f32aa0b71153253c9b18f574a0489372472a8ec","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.3.tgz","fileCount":179,"unpackedSize":286292,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3maDCRA9TVsSAnZWagAAVWgP/3ZO4kP1m0VvUlCsU91l\nBl5q9lNG5Uo2bvinZrYTVUhFRjFd1iZJSKa5P4zDAEWoXTXb60tOgnLEyo3i\nX1EvNEKd7AROwZIn8zFBYX+nE+2YMQj34ytDhtKZ7qvbV1Cs6GQZqldUCeLB\n7VrUp4QDjgwkPgNmk4LP4POJeqSG+Wr+6Kz+f5R0bIJqZuAad5LR6aSUD/dt\n1L4Kj4+O4fb/4TuOm9npOnV4DjesCgaSsKyQcdkxhfpG8cS2roMrNAKQb7aV\nhOKIh+nmJa6oixHL1oqcR9m+X89zrcDEOJm4liNUrNRdwFC6j+T0+c5thsdW\nPBC+E4Or2S/hlkWiwy/MNqQRBQ2WSi2LdFqk2lX2xJN7JFBF7e/4DhFDR9LW\ncFunqPFXH4QUSoQIgJ4GFlttn+NZ3+3kutLdePrCV9VUpIXpVNU2gayoLPVa\nEMRSe0WY7i+UyK8IviyCD6qSRVLY/TxoDwZsu60cOZlNjwQMWLp2KEzTsSc+\n3HTFV99IgKRmQOhT/Lu6vKj36cVrlnn62yAgTC7PollTKoABBUKsFvWbHGbv\nL0E8WxkEAzwsHIyNm/iGS8shJkaccyoWSCataVgkQSCkwAs+4UGV3nsAB0cS\nH7m0ocwcUHjvTgx3rgti/3AOsz0hadX+bPwaWGAsNC3xEsopb2sNj3l5Bctu\nqrgv\r\n=NCWB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfDsF2gho2k7W/2fbdAUiEwmaFEMhGXHDm5ktNEt8DSQIgchjfDJjm8dXYm93OlksVVfpwzx0HqpqYiMMMUKZNy5Y="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.3_1558079105768_0.36488411316461344"},"_hasShrinkwrap":false},"0.15.4":{"name":"reskript","version":"0.15.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"d80682e746db809f3d269b488c2e8dc32519e4db","_id":"reskript@0.15.4","_nodeVersion":"12.1.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-OPO4DECdr/+8s97FaGsQ94h7hjVbwN1MsyEuN3tt8iNzjxVzBj7RGigCe7SxEzRCG7V/CEg75PhXpyciQUpdJw==","shasum":"eac84eef2667b759ced48b98c0c5f5f6ca71f5ab","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.4.tgz","fileCount":179,"unpackedSize":286776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4MZ9CRA9TVsSAnZWagAAj+UP/2yGf3coQjNLSbS5c3WX\nGYW6KsezV3UZa+EQZCO5ZLhxo0m7OmUy0i9JYIzWO35k6DGZiis2Fz1bb9k0\nmtFGdC/48pgD7tlGM32YZoB8lLAfkmra56W1m5xgWVPsVHUias4+yzS07UFG\n2Q4q9O3/eNnQdlEAL2e8UH8+dmMJsCt4dyE6T9/5cZdhuQA2Y+Kn0QdZW2rD\njl+qckjdG4bAibMzZChDLmNwm1rlpOBWGJjHcqq21V6R/GYIPcyzYvrPIsKN\nL9c0wj3qAZ7rQZRlk7eBC3ZDRFKIa5/z1xU3dGhg3LGABb6cWj8KcbCgdbQ+\nmnJ1ffPh9ZOEn5Rl11T538SrKJ0hgfPVtu49P5hGzUzyqJXuajK3OHXHOrRD\noGXaW++tCbEk3+FzbPEM0cj7z6ElwTM9LJX0ha087ca+i+8D9lq7o+Ehl6jA\nHlayqXjvGm7Qlxg8nLgnDaUVewvdG5ewl2ExOtTi0O3jXgzVKCA1A4c3wcqm\nnJDUeysFvnRvDZUIP1q9EgeJRZvoW/G1QH6WlcrPNfZdDm+O2DaIZejkSQp9\niLzQYm6vKNM/Ry4VlOfjddvxTTIoZTa3tu+LGlnMWknOR8xakdJTa4YY97Ca\nOz8JGzep97dt8/MRt3w347NgBjYmCd//COsIZDQIltgQC3Y4xK5Tj2ZQRmRN\nOR8H\r\n=OYtR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6/Q0eeTkc4l8R4s9OWBBjZ/LqcGvpkG6edSretIbd6AiByuEBownwudMSYavFVpWAZyKjtsAWcazUJKk2uzVgyzg=="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.4_1558234749068_0.10572169171513823"},"_hasShrinkwrap":false},"0.15.5":{"name":"reskript","version":"0.15.5","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"6e7386ba99fa295744463c527ebebbf920bc7adb","_id":"reskript@0.15.5","_nodeVersion":"12.1.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FAeC9ENsuTQJ2iKyPidFhT5dBg90qiTjDLhEGVN4xo/Sn72Dce5dQwtjt4NJ18kPnxo85RJIeFdCy8Y5cgu5HA==","shasum":"830bc5989d00e98aa0d378bf9e28d4762cc9f473","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.5.tgz","fileCount":179,"unpackedSize":286883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4UFLCRA9TVsSAnZWagAAfZkP/Rq4iZiEA817FDwiHCOa\nBFIhOyRdNjiuA/5HTPW5GcIbtVY3Cb/jBN15a69Xkatviq9lAhnIaPk/crJ+\nzl4i2LtC9HHefcAGuvFxoFGCB0xsil2XYm+ILCBInpEWxleG0pQP5FwsWcZD\nst274gIFBgFh1CusoISYX2q7Pysyq7L2aF+8hn9IxOez86+81c04b/ykQtrB\ndSE8oNqCQ6Xv9dBhUJwT4QhRJVeq/ME+qMN6oP62BGVkfvpa8QEZpb4ucerw\nN+aKSCq9xaUR2fZPhmXbbeEOuRvgcEuunNjLYGEwGMPTNG0LjIl2cIAQB7W/\nIErEny8bl0NXO1+3HZHhfqmULr4nm7JRc9VnaSpyO/zQWzIgf6b0iaq2jnrT\nFSd7n2B2Bcq5JPNsKv+v5NR4jxq2njGQcH0TLkw5R2ZWPWztFB2tRxTvc2A0\nrP3sOOQKaqjWQ5XZYHygZrdJ4wfOXiRbzot5zZHr2w+1iedMKA4DgPe2zxgx\ntxGfdyEV2GrRv3Q5f0uA4EnGoM3ea84FaIQdW8IAXHYHIMxpXkLhc1tIaRe9\nSd2FmaHyKabWpm+ZwSwRD6JMeHh04hTKX6tC6DXzFCs48Nt0/UI5jRfjxpBP\ndJYkyhWcRcci064tYElOydJ4vF4r1QaAzZuYbwgMI7kuG9AduPJdl1d3NTmH\nl/pd\r\n=XaBw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGD12utU9HtTShMZxHNk7jE7svB1tidF14rpwZMGAc+sAiBZxx8j6p30tyI4p6YILChl8Xz+OXddy+HlkpfpFWo4fA=="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.5_1558266186647_0.48218408669968804"},"_hasShrinkwrap":false},"0.15.6":{"name":"reskript","version":"0.15.6","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"68bd499eaa63d9580c125387fbc7c8eed1fb51a5","_id":"reskript@0.15.6","_nodeVersion":"12.1.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-zBv7UzgRy1FcDNjAtUld3z2qNCFPj9WWzbwWo9/s+qOhw/Aq3ZJQj2IOJ90kWyC2PYIasFGu8opMiVEjoqM7zA==","shasum":"a56980e5e226caa555e1dfb1891b02f52a9acc82","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.6.tgz","fileCount":179,"unpackedSize":287458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4keMCRA9TVsSAnZWagAAvV0QAIJ4E6nZAimDHLGhkMtC\nxWLSXq8R7SH/M/0fFCiOSGhedqPEpwPp39V941Vei/m4UiGJldfDg+bcfFGR\nVjMzRjoUTx4LD0uFWC8R0vUHuyN9G7bUWj1wczMB3mw6p/sRzGUn43aX8Otf\nhHBmDMthymcWOci0ny3++CLfY3KBTilq2VfkGnqcutns6HH4I1u3sXf84SGC\n8S4NKioMWpsDmbFHMB5gtuiECeBTbI6id0EEgp4CECWKX2jVRrakW07HfNv0\nSj+o5+/3Nd3BD7RcfO4lSzFJ7eJQh10lbMOnj8fnDxPbIemVtShdaZJ3Ol99\ntvVjPLDo3k/2QsxQImP/WsWd+KmWSbHCQ2Ch9AX4uqGVT0f5Ir1QA2NLENnW\nZ/hcjsi2pDnYjABHj4j9HE/Z32bnNs7HN33Bg3glyn+VlhKTpthHUdxMfEe/\njbQn9j3H07igrCey0Ur9mDuCi5IKi3gJV5R87ILOpQDhIFvNKjLLeDVwpOgj\nqhTVAKc6bl2aqCcGTLYFoihYbLhsAo3aKiw9EbsndvJ3SVeOUE7ptyAp60PI\nQgWsLCFJ+Lcaz0lh+88TmWw1A28e3f8nSJ8jXiBJn0YWYcrvhGfdAiQAR19c\n9xjzLsysqJZr4mZtqCboR71fFws/4yft0YauYBljVjGOnG4bIePmMaP7eNAY\n2n56\r\n=Lp7T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDPnQrs23CVmHymFsbOXSkbNJsu6Z6c+OP46ZyOckTFUAiEAhxHy2iWvC4n2TLiGb8FvC0iWCtZUErirV/6VA1UaRTg="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.6_1558333323745_0.20005591905878117"},"_hasShrinkwrap":false},"0.15.7":{"name":"reskript","version":"0.15.7","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"fab003f578384e92aaa8832f6a8e23a48f966608","_id":"reskript@0.15.7","_nodeVersion":"12.1.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-OxYcHl7w66mChrOlNjXKHwVNbbzClAfhRQF5mQ9MHv1sNLv9UI4o5+tGYvH2rzyjlFod3vO57FKSZd4v1D3mFw==","shasum":"11615733215f150d84b3473c1708f63c42ecf15c","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.7.tgz","fileCount":179,"unpackedSize":289217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4lVpCRA9TVsSAnZWagAAYC0P/ReLAFR8cMIWlcLE7Lv+\nXN77D0p+IDgY4YmjmdBLzgcf/naG8JOPmaVDGlIsv3qDHNxgXQ0dJkCLfGta\nKomgLRQ9oqsa9Cgjy46OGdELaDa5PFgOwQCZ+uBSaMFcNY2M/BI3s4/qrNId\ncknvqFc45gePfX6rpbSeDgHJ2uXCQK/JUPxx871h15/7j9043p65YJoSBcPL\npJRJvCWchcZ4Ex8DExeMBN8lJ6kgEs1kR8PZVCF0OKb29PO7EbJ2yEwQNm+m\nLvMlAP0nFNmADAQn+vxWkfn1wjccPk4wSJfVNPWa074jbEVyGzLKUfwsHQ6v\niqoXpkPtOIysylCHX0bJZnfmYtx5SXJuyNviQeMax6XE6/PIE7j6h5gQTexq\nHSsZSzM4u2RcXlPGemmXt6AMODRJ33RBEE7csR1ACapNERDg0udx6EWbhiS2\nvYiLD1lFgN3g6SEMwPFZ9enmmqKEn2Hp+jprYzJs/trjXwQRC9Tjx9+27vv7\nMaPvxejSF1RkASafJB9ZdAfimXp+IWhn6Ot6nP6JyoOiuehn4DN1KJ2nsp6i\nQLUVuXePkcLIAq5xDUcGN8T+tQho45PWTxT8DBAUnJaZYo8o9VamUsJLEwcP\n4nEuMRnvo0bRNkqfkyrl+MZhWvYew08HSa48Rv4c3vFbtnmfSxzr4hZD/5qu\nOk82\r\n=jg1n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0+i6Tq2Ci/6T8F1wu2qB6+Leqn5bCk4ruZbxYyBk1oQIhAI/0zqB1yMHdiolLQekZKe4vVvpOyb9IOwoMgndAggzE"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.7_1558336872146_0.24227219203700523"},"_hasShrinkwrap":false},"0.15.8":{"name":"reskript","version":"0.15.8","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"cd5ad3c42c1350669b19a701ac0f398a51da644a","_id":"reskript@0.15.8","_nodeVersion":"12.1.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-57aFZfXgw7wFI8Tlcjk+cG9OY96XaEMN/r25tG5cnog671Zmf8odoFpF76uErPYhLDgId/hOwwp6nFAV1jgsrQ==","shasum":"49861665a379c3db681bdc23e1f1c52b80e0307d","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.8.tgz","fileCount":179,"unpackedSize":289407,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4mKYCRA9TVsSAnZWagAAzWcP/1QYKhm2CuHEqYe/gCCC\np7265evWwtOfK4ddUnC5YzsV0J38I2Zg/yz/bVnUz+o3oBoEX4P+sFlfMmII\nxlJlv7PbypHCvq38AP5bMhZdvS+w5tmmFrmG5eV5ByFelJgDzQGB94iDWh0B\nH6SFvu3Apft7Voi2+oQPBOhluCHFsTBoA+/mk+DtqdZ+C045crcTE2k1TaK8\nqT3xUK01bR6rZTv5mgEh8mLZk9VLL+RYwHb29AKdJQNyHLpslEdsY0wT/krr\nxabg3Xmvo2FmMklTDIrKwsE9pcLky+1Mn8UjYvsIX4ApSICPM+iSUCZbk6mp\nrEV4jvc+JTvCTW2KNrVdGp8zzhROcAj+bHdNMuE5zBYuost2iRQtLkms8BRc\nEy7ZgSOzknx4ReteIVLSVggnYoXIvkjsxsfH0SgJipVMhc2utM2owuQzmU8K\nXuUptkhKyNa0LLn224DRDslUwE5Ao4KKLfptVToSS5nAEvCB1FAhZ6YEBT6h\nzeyPT3pjxj9dnL+DL12jNqir22jp4TMTruGDL18n27GH2Qv7SZyXDsHe7nB2\n2chNbrhSaMwN1X1kE4VTZ71U2dTbDFSNSd9orovM5qYxA/l0A8EcWiJhap51\ngti8aguc5uGweIqO7duWHlEkKknDPcrZQKJSdWUdInh8BjKjUt+nRQR0T5LO\nJX10\r\n=cHDx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC41Do8OoTloOemqFdLnyo+vwcYAyc7TLzWVpz3PV9yoAIgCjDxccHc/UsA4NMe5iqVNEdvpkMT+Ok2Qy4NMryme98="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.8_1558340247884_0.6688744177390988"},"_hasShrinkwrap":false},"0.15.9":{"name":"reskript","version":"0.15.9","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"703b8ff847bb4106bed10e7c8390bd5726cde6d7","_id":"reskript@0.15.9","_nodeVersion":"12.1.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TayVAuXv0dzeK5Ij3024JQs8bOQXwsmshYO6s83hfTESMj6npVQsyCqQ16uKElnNG8gh9rFfGH78LcN0oWfe7g==","shasum":"bfbaad9790f15e2df6cf98ea6120903f24a3abfc","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.9.tgz","fileCount":179,"unpackedSize":289544,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc47BTCRA9TVsSAnZWagAAPCAP/2qxUAZ05NqdK0jHmG1e\nfRNHJB4eWj5pxRw18pGhlT+8TLBltzEyK/99+CPhAqxiDk9yzT4AdgEJOwuq\nsK8QrFgKSLQFeSxasPCaQtA5gx7lhcGq2pcdYaZyDKDljlcmk9yYXU7x4DQh\nP7svBszs9eCFfG26pQ0Ojo7TH3Ty4riB0J4zm+Kl3qySc6RZyfPEw6x6M9IA\nAJ0Tj5dRkZL6jZ51kc6MpmXcweMsgrzaL1Up8sAVNXxwKj9xqBuUz8dm1EYq\nLdihVUw5FD5sZwNhw/q7r+2bxKoEwNSaybULUEtfmKgaoMGcpQBbKWzvmmnd\nEwi6ykvFH41Y664V4L2dtjPwowTJWeIKpInm1ao0HkZ2Y8d+pG/Wj3CQnewi\n94JfhacidZmk9CV+VIT5nvse5hh88wayKpLnkFGQW7y/G80mfH7XYoGEQMro\nqus1LqLA8v+YRFFBIBfSjZYBAHpAdT3n2lya/Wv7pJb3CQbcbCE/77DEt36T\njfHmOlFk1c6/OQvb1qM6PVq7ql3GDcps3B2QMwYly42m37wa5D6Le4ECn2OK\nXK3+yzng4q9SDAiF/kCe4ji9WOQYrMmC+8n9GIOMOpwW6dOCfPoHMDtydxO9\n6nSNs81eCaB/EnJyO1/+xnmSRkNSGFZw4gIduMnmXA8fSnYjXq05FxtR799P\nPro8\r\n=wFN0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrEWERFacVSPLDuP7YM58hFUUdAar9T57rEZwfOC8PEAIhAMBMNHxheJJorejn6ONfnKxbVXIl+l3l4lLUezuANCoB"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.9_1558425682272_0.9059402112264319"},"_hasShrinkwrap":false},"0.15.10":{"name":"reskript","version":"0.15.10","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"1906259fbc6d06106fc4b917dda59f0744cb5a67","_id":"reskript@0.15.10","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-36AyVI1S2woEFnRh3MC0y9vmfZYiZcI0jmn8waM6KUBj/SBwEunLUR1/sniV26QYUBHDzz+MK0YbNJQGOwwnJA==","shasum":"1511448c15f057266d4d504049193afaf7af0f2b","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.10.tgz","fileCount":179,"unpackedSize":290444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc6MWWCRA9TVsSAnZWagAA7xcP/3YzcVeSbXV4RzjT+9bY\nP+Fk8tp//7eh0z2RHnkGEgntKEQfgZlpZ5A4aFzLH1FRqmP7UYAkC5zUhSyP\njxMHff5Vz0DhhqbRpM9Blw12LFXslO0EUQk/heTibLsKF0AtB67xJM7J2E0n\nRegMvSQo/cNtgEMD3varJarq2fTfsmZOkhZPNcOV36RWuTIBlzhDtaP7vIP6\nmmEpfoIubQtzyL5vaDWM+7NknDORWoxVn/rve3TXVnC6vO/pwxtn1M1WMaYw\nbZF+dgg4uGt5hKoNGbu/rwJjWFUSY7Mcs5Pwz0g7rahEVPF57ysxz40DyibO\nR7BSu54+lZcxGW8BeY5Abjng2Bvf2sCErq28IgsyLjFww67xp+BfF1/Yfs/T\nudYR2thDuZpPpxZ8+dU+HcEtar1fRqnuVX4JEbnQyF4luQXkUt/rObUOJctB\nUpsKMsFYYcipRKtHVcRm1YbF2COnktlkKb1/ZM8tTb89IUo03FzPT9/NG7YZ\nwvvOpR346Cpf7OShHzUiNrnF25E8TdbcD2ScZbaEjjClBc7LkfT7G/pTxH9j\n5D2yvBg5L4/mxK8+3eUaBmkFL9OalW23QxJBkaPFeZQKPxXI3uVG6F5RAfJM\nDWTrhC2Ce+eiMDYJ+JGKWI4+YRWcXFyGcM93n5ezffd/Q4gfjMnnKs9dGo/v\nRGjP\r\n=IQwJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEr0hZ3Duiyv8dWS66LvIVwtiYqbshrpHuplOYvjG1ILAiEAyhFZO2Z1DnNdw3cuF3wZrzHmDSa1T4iNLXi/NGTTa2k="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.10_1558758805743_0.7829733135532326"},"_hasShrinkwrap":false},"0.15.11-local.1":{"name":"reskript","version":"0.15.11-local.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"1906259fbc6d06106fc4b917dda59f0744cb5a67","_id":"reskript@0.15.11-local.1","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-w7IZFp2qJ/9sojjtbODEv+1f3dQ5dd0o5S4tJS/3MCNeGJIsojpoxBY5XDhVDcaVJjVYCoIUrfbONHhXXD1kHQ==","shasum":"587b082d057ff5267f46c82d07d2d87054eaf649","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.15.11-local.1.tgz","fileCount":179,"unpackedSize":290609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc650qCRA9TVsSAnZWagAANeAP/3R9EVu2+d1yKs2fZiLa\nFAKq/aZSUU8QjIcjwFYC8EfqH9YANBCi2k6aPB6o4KenVNz7ipWmN5dU0EDs\nFS7o7nRaJZ0L3GOS0I8o+/La7X/ITKm1tM4RY1luq+pdZjO/gRdF99q/w2cL\ncsbVtuyoaHQ+Usj2NdphRhJSsVV87gtn5yrSz9innZhx3DWQ77ADUrI1E4Sa\ndOfkp3MJ79HCOBjbozeRbjJTVd8D1MCGkpUhLruj5H0BvEDsFxqkiuAki3PA\nbFd+FyGatUOkJMTdb6EHetTTZBsBU71mHSIMR0tPxaFVsn2hNpTbWRO+5dfs\ntQ1QXXQeLOPmqIT8qj60Fjt31VQrX2HHbZST4F8pLJ6vtdB+hi4co5g9BzbA\n5sFNoHYzFw+1SuRtqBhT15KSj4erjifcPaw3XOVr5zoMToG8WNOLLJuk6AFf\n3w/SP15oyKjH8ztdVfJYcqME5TQW2MLM1it1I/QL0m6483J7fvO3w3DEtZcu\nwfsqTck73nuIgw+PSna2/M9r9F7h/n7Se+Rr85gVyxVAhjyXSa1fZAUdalKC\njPBRbu55GsogmmiNFSptf6FcU5X7A96S86iVyqBts+paejYCiVArx0bGRqUP\nEL4NQza86vP9oXA9vtdtj5yCD4yNqx5DwY5dauEn1uqVZGIAWGbqUh7pNPJB\njA6V\r\n=SCaT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxSvZKmHVbxJtOxgyAfTSAwN5zNBsSPJ1QOdOx939mXwIgHnjzwH44tbLXhSZnjgW+1TYeJ+LJaIW9zyV7qhDWi5M="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.15.11-local.1_1558945065242_0.47030767657204"},"_hasShrinkwrap":false},"0.16.0":{"name":"reskript","version":"0.16.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"3f9477290db89364f248dbc7f8d457f2ad350071","_id":"reskript@0.16.0","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TO9huqXlOOgzI7p+AZohPdmqSnqQYVhyKkaqbNJVVaXRhsHzkzmcyAB6v13gwPCI7V0SSj9f+A2PT3LjZuHosA==","shasum":"e754b22c26984aa5d91095348e89f59c13425aec","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.16.0.tgz","fileCount":179,"unpackedSize":290443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8A3gCRA9TVsSAnZWagAAVEMP/izgV+3CEj/9R4hkS9yd\nZ4uvtx3WN4cUlehQGRx873mPEADX4eKisRMW1oVAJxX/gTs0tVaYIUGLMcaM\n+HxrIOmfM28E+yoEP9TNq0Oej3ANifzSxOj3McikIR2BuC9+dM7aBSPaxBdr\n7x2B9xQxrtC9jRjWY+NBncXA9ZbueaBmILYQA6arxfcm/tq1DM6nWu8chfCr\nfOxgFJwJaz9gJIeje1gLNSpz09iksVAbGK/it9zURpImryrvxSKf+1K0sFDd\nhMQfnfacPoYNFxeqyUew7XQHx/N/MOsf2oHCXUkbXg+cYDbkOtQ5licQZt6r\nk/TnO+EXdRv4vftOSPTmDTwRvxMPFmzUxzWoIzWXS0j9EyhpL/asfLIGb4xD\nyuROmgsT3sXcEn4nBeHaB3P5m8Dj+IbnHIF/5qCbJQjQCF5jjSU3aFLgVv6c\n/7iBwdIqlLjcmNrx95hPXXHXn4WQVKiDtEefHh3basV6Xn0fUTiCpZezuNEV\nme9amLjuNMSfx+b2//9otVW7ltVUyemH3lT5t5xgWo9iIruX09sXsOjMheCX\nF0zjPPF95htoOwqs2zwtYQbJs7MVaAyHpfjX9Kx0z34PE/Royy5CYR3bv2Pz\nJZ9+9gP8pAgb+uoEXt1jls6MW4wz1oZfdTEDnFrWDDGsC2IH93FomOU7wqFt\nd1dx\r\n=WhJm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtQPr6j8sMHLmGuOuRIewz/6mX9ZkOt8Hyl7zAxL7QfAIhAOMuqZX/JQDgGRpW5QdQWjW9s3B7AoN2gkUNoMcQ5UTC"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.16.0_1559236063531_0.342201200325958"},"_hasShrinkwrap":false},"0.16.1-beta.1":{"name":"reskript","version":"0.16.1-beta.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"01a18aba76f8ec758510b565ec448f9472efa69b","_id":"reskript@0.16.1-beta.1","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0oToS+uVRBsPdflREulmDRfFOsl1s9hL515ebPBW1wyAzo8IgdzZBk+yWDNlFLWxpvAfTdqXaxul+1L52oujvw==","shasum":"3b3a6246758c8a33cfcfbe2c5221088bbed96318","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.16.1-beta.1.tgz","fileCount":179,"unpackedSize":288864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/KJnCRA9TVsSAnZWagAA9yQP/1TE+aR/1hnShOwCe/kI\nMcc622Xust2UDn1eDsnDKi848ffY8s+h8Z3LhcLpWnHNW1zytBjfFYSoxALd\nP7KzBs33gDPVBBYHlGKbcfpIbESBtum4iegc6LcIC9iNpFyHJGswqzZfMO3w\nA7oH2EljFAgugo2bNrdXgSV5yNdS/b0zGTtR+F5uO1cBPVjoc+EzDHW0HN6+\nQ4ndJ3TgbUs+qkplRpKkFe5B6SVuWeJqHDmHLIoMMKV0d/HZ4QbrOHMfbFqe\nonO1sVbnG5AK41rdCdHvmAqmevj0C6u38evP3+Cibkama1ERWmuRilr6GvbQ\nmwregZiQGmF0u+Gps34wOzM85f/KYYR6RcW/u8IjTroXeN2ej/1V+iAZKKaD\nLbpV/iXs+N1++x5OKZemlV1pgETmn4hLv+gfSe2vAXJXWozyVxmiGAsadLmz\ncP87N8E1yxsGDAHDh5g9XlluKafxEbfZQB/5rPP64G3JWqVpPQcifidzlqtE\nflF9Xg/gfyGS/3iDL7CjcmdCyEhwG1sxqT6LVLiNx1GRJWhq+PvccQ1XUpj/\nruMt+rf3r2CZmbSKX87cNTXWn1tzwmPC6kaIbuNSUYjyNBRjItURTNQEIPZM\nZ/xFxA2le/SO3ledzWch8cq+qR29Pvx64dI1uXatgsmCCH+3Sxhnrz/3nHuz\n7BR9\r\n=jLYP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBBjNQZYxTcroqf6QtT37Bga479+tGtcnwz0xuHj8zdZAiEA4AAE7qC1SfMt6VfoyyiaH8s6vwpeisy2+8O11QCfTQo="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.16.1-beta.1_1560060517887_0.47039320950856367"},"_hasShrinkwrap":false},"0.16.1":{"name":"reskript","version":"0.16.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"2aba7f6b6d18b411a74fc9ba8af5682aaee04440","_id":"reskript@0.16.1","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YkEVZxT4Q/UH0KT9TBF5nkXTNW8qB5S/odXT3SCsC/ux0vDWMUx6nN+np2D95eogLrGhUL5TWREE+KkCcLQSlQ==","shasum":"bfe3c2b71d7bd30bfcb4f28131c65914a4871cb7","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.16.1.tgz","fileCount":179,"unpackedSize":288870,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/KitCRA9TVsSAnZWagAAXRYP/1EcttEHnqToiFjyIF0L\n0hyDJYwNoubipzcDQsqrffIP0E9O7GXtMmar7xKJJH9LDBVvL0S3SGKZX+5m\nDzf63Kz1GHfyu0I9TepYjOsf2F+btAVZu+R2rVWVS90JlBbXvO0CVma03qwd\nKMtHmAHlDvc0oK8rwEvkUgBUDMK1MSw+6LBuQLK/HGOrewlEHtxaPzrahsMO\njWzVlah5i6VPG3NgWRX6AQwIqzBKjvRj/kW1mVduuXtkFDpJozbFIYVcP1TI\nkwIHEz08NU723ymTQ5VX+MQe95ohFwMZMCgpOZc3SqJEtdLL+v42Yw2HeIf7\nAtjTgGCQAyOsjIM5Xvwe68H+a4aN/BMzzlO5pvd2/Ot37kjCNtp/yREj/dKW\nArJ2AR0H4V2v33uBcvdjFXA/OF+l1QguKmzMGn3U3i5tG5k1/OvvFgSUIwhb\n+BfVOAydEej9FcIJaJMFgcuZ0WMT9qK6wldRsW1PDgZkmyKVD9TYr8VYOeN4\nm6/jPYC2pvFpWaY41tHI/O4Q/kKQg9q87n04vvj/X+3VA5iQL62WtbQX2Kjg\nYHuDZ9WpaB/EBAdoxaTc+U5YurpaulEamX67jiP+wBYvi2Y2dZUO/41QK6jT\nS2Bbbu/+iTWJOqK5gVoT4PjKUbJAIjujZKgq29qECJGx+80KYLL55x6RgMa4\nn1HH\r\n=RKQW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFrNVnloSgxD0yoC++fHoX0ebTx7oVfjYLI2XqtcEt4QAiA3UDZJQsJAHv2V3zpdAywgU8/vFV2TfxTPBAv+l2k68g=="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.16.1_1560062124591_0.9697274286663125"},"_hasShrinkwrap":false},"0.16.2":{"name":"reskript","version":"0.16.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.4","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.4","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.1.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.5.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.5","babel-plugin-import":"^1.11.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.3","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.0.0","css-loader":"^2.1.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.11.2","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.2","eslint-plugin-jest":"^22.5.1","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^3.0.1","find-up":"^4.0.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.3","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^6.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.0.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.17.0","print-tree":"^0.1.5","react-hot-loader":"^4.8.4","react-monaco-editor":"^0.25.1","regenerator-runtime":"^0.13.2","rollup":"^1.11.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^4.0.2","san-update":"^2.1.0","semver":"^6.0.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.0.1","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^3.14.1","tslint":"^5.16.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.1.1","tty-table":"^2.6.15","typescript":"^3.4.5","unused-files-webpack-plugin":"^3.4.0","url-loader":"^1.1.2","username":"^5.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.2","enzyme":"^3.9.0","webpack":"^4.30.0"},"optionalDependencies":{"enzyme":"^3.9.0","webpack":"^4.30.0"},"devDependencies":{"@types/babel__core":"^7.1.1","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.1","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.16.1","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.1","@types/jest":"^24.0.12","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.122","@types/node":"^12.0.0","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.2.0","reskript":"^0.15.0","ts-node":"^8.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"cbe94500cb0e9f9cf2469f41f53c1c1f36d0df43","_id":"reskript@0.16.2","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4J2o5Kr4dtOtjcpnmY0OcO+VKzvdXGyFun/6yH4ThYugsAKUyzyxKBFtMaENHPOjJ9gwPKPEmUKN223RU3zVDg==","shasum":"cf129e77d4d64690814481f3e95b9d349bed3322","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.16.2.tgz","fileCount":179,"unpackedSize":288913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/g0ECRA9TVsSAnZWagAAcdYP/0T/QKffBLzn1EtdSo9O\nfGRQ79cSCKYFFH9oFxGHmTYwgSaBL+ItnBimsGQXKVuwWG5NPI1MRCuZyjH6\nAbAImr66rX6P52aj9K987Ta7Ba9x+dCHq1UYmBPvbfKA6zhJf+iP2Zh2jCoe\nLqfsrNbFCUXrsMqoBcNQ7fgdTdqGwYGV89x//5vQAHg9QUZQs4K3af9ezcOz\nsdtbB6DftChECpMaHBoZO4T2Bz4nXYXBpw/kahzk1OO7LtDSsOf2Z+5a1/tP\nO+GZRfKCDCLrGDgxxbf40w5ngAp3PXPYcpZCe8eGms0gWsQDjWireSJUjufB\n/rtdpVajzMDukfdxEpcnNoRJQTmfO5z4EDxbS6tNTF272s5ZkKMYfP6mVJ3i\nBiKiyHoXs5diIwP5QGRuUJZjBnVzzQtUShJ9dZtzj9DHLMlGGbOSJCdFOxgb\nLsdHR4O8mmzHwtqsOn+K/6oCiUENnJVdQLtnKUf2Vn1vhYZCXMEXs8Hs+/dN\nNKRpHIJjVjAwyHHanPLafj/oQOo/WrzPx2x0cvlZgTkyPrmbsgeMEUk3SbR7\nG+gBLLaEpOEjhDyiJoGvi3/CNuH+m+hyDsnkVXg6aZvodXHjzS+z4OuXWlaQ\nU87Fgx0Nr8zYD0AZwWvUvHOO0xPr9tQA/djnh4iRx4BsOtCwo983gvyTdP0i\n7gjF\r\n=Ir0X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8sl/hgHjbo9hEGaPV13RbBA6/r7KlrliawdrQFH60LgIhAON5awakv8bcn2K9MLNpvg63b38W3WFUjUVRW9L5faet"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.16.2_1560153347394_0.4689992700066816"},"_hasShrinkwrap":false},"0.17.0":{"name":"reskript","version":"0.17.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.5","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.5","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.4.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.0","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.3","eslint-plugin-jest":"^22.6.4","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.11.1","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.15.6","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-eslint":"^6.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.0.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.0.0","san-update":"^2.1.0","semver":"^6.1.1","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^4.0.0","tslint":"^5.17.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.2.0","tty-table":"^2.6.15","typescript":"^3.5.2","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.4","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.134","@types/node":"^12.0.8","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.32","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.6","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.4.1","reskript":"^0.16.2","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"37b196a7308828ff098bc6f485b63b50fd84195c","_id":"reskript@0.17.0","_nodeVersion":"12.4.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YrdTXHt2RrTT+9BI/NA2TLzbv/3GrgfP2Xo29yOYFGScLOQKB6EPJwv986d1I7f3oBEgyseeX3xlOpUUyUnmNA==","shasum":"dcfe1b5e9662a43d0105a92178eb60b5715f4b25","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.17.0.tgz","fileCount":175,"unpackedSize":281668,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC1KxCRA9TVsSAnZWagAAnU0P/igYuSbbBo0/9BBu0DiS\n+tJsqFLmFfwrF9j/Bhkips4g3TCrO/l4PWuCC73e0fffxilslmlq3J+sSLvp\nSsMjvIMKieZfsCU3VV5ty407bTTye3jgIKrr33nXcHYKsyoyUFMLwT4kGk1R\nedDoOFNE6i4RjcPRPC3pXDVdSDJoavOfzjdQzc0dX+5ucDkpTYbVlQPprkjK\nU4OYOUJEpAxr6BV1HwmkEN00helbHGelxVE0JqUUguB7s+e4tS5IaddCGHBg\nYEBX9/uxagfo2juNa1epNP6msdvznpeity7+DwTG5cxuA1dRgJvhwNMikjwN\nZ5gZzWF9fTIA5JdusY94UhwW/HWSWBq5uuwfy+MMaEZPG43NsuP+PUsRqrtD\n2Kq5svVU8ef8GglAZvfAAe7pm01C+JsybGnie6GWgONmRPpxPXsJhcqvCmYO\nk79YM9/iPGkIrpTtNj5xdautT8kPe/UvPNK4Dh1DY4oJk87V6EmjjMKOAx8B\nWPb/d959iK9g9b4MzsqwugXMHw7q07dAQRaDreR+7EVv4wc51equXfcGHyOI\n5pdurRuSol1ZJcZcZ96n4cFBBKMJTPpbWO4+TM89I+mSFT+/9FqpP7kyRsan\ndRp1ojrR28SINEzMutH1IQ6a6JWR9FyeEbqQewGZaqEYnO1c9wqY8raFDNPE\nXFRa\r\n=LPP2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUvRJmTLt7bkAzWCevNIH+5EzJxo1qkyDF8bZVe3LSGwIhAJTYvfH7/fcs6mLgUMnXY+AmJiuEa9orBihtCZmPYcTy"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.17.0_1561023152403_0.26608464918225483"},"_hasShrinkwrap":false},"0.17.1":{"name":"reskript","version":"0.17.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.5","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.5","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.4.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.0","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.3","eslint-plugin-jest":"^22.6.4","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.11.1","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.15.6","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-eslint":"^6.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.0.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.0.0","san-update":"^2.1.0","semver":"^6.1.1","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^4.0.0","tslint":"^5.17.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.2.0","tty-table":"^2.6.15","typescript":"^3.5.2","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.4","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.134","@types/node":"^12.0.8","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.32","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.6","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.4.1","reskript":"^0.16.2","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"0954b562a61200154c911439e64224e443be4de5","_id":"reskript@0.17.1","_nodeVersion":"12.4.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bgXfLbYmtdO9x+Vuce5aGO4azGY6GXmvGuPoBN62BJZYTnPguzktxj5rmcWbUYaqA3upkEIHQjCwtFOgZLH50A==","shasum":"773d04b885cb5f84485158d739a20d28eea406c0","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.17.1.tgz","fileCount":175,"unpackedSize":283733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEyMWCRA9TVsSAnZWagAAtxAP/ipcN0eBgrxwsUUeU1LO\nLC8lh9QGw1/Gxv+6RCRvAL475enoerpAHKMLI0lH0qVvViwuJ1pJ1EMuDacf\nTo2yxRzUbky9WpdzPDIizjcr3BMqeM4/Fj1AVIVdSWDejsF4q3jbHEBBp6In\nuFPUJIVSoHlDqY3ol8Np+Iznt8t7w2N23ttPUMp3ZBH0IxPgk7dosx3VHami\n0CkchNaQQxuiOgMjFUPlZJI31xWKXjzj9YCJznPHbxMURL5RHnV0Uyqhp9fU\n0R7/ZzKtYoQQnBi65rCKPCfGrQ5rKQjyWo9mQv+yZiyIe90zEW9nWhdeEQJD\n8eOieczUl3fM8vpJoNoo/q0XuUZBjT1sIpldQwsXlaJKz+4aIfPDTo5JkYUF\n4DqvVBgwxPh4yn6f28wJaQkSLoNxbh73gf4y3Q/2z35AIk43+9N0GyaXviRD\nDD/SuPyBA9J/jsDRHTucXDLFdY543BXT151XPpqh361SYjErI+NA5wOa1HYN\ng+OhkKE+tIDXsvPgMB2Yyj5jjGYxYLCt10R4CuZAGplrEOWquhvZoft8F1vF\nM+leQ/CmFJxq3VeX2/uSoogImD0ZachmhJeeGWL3gw9TpIvC62OYcTxuPiCD\nYvU3GPlHqhfEdekFvsmMY0c3igW+HERhD7Uyd59wEvBpbV11vJmrmB3OK0RE\n4E1c\r\n=37bF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAnaGXA5RY3Hg1xjXv72kEZg1QyBVOjltOBTfx8gBN5QAiEA4atw7JehOa0Ls51jdaikJ1gwO2o7EsplZJOf7Th2gfk="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.17.1_1561535253273_0.1951309366918117"},"_hasShrinkwrap":false},"0.17.2":{"name":"reskript","version":"0.17.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.5","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.5","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.4.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.0","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.3","eslint-plugin-jest":"^22.6.4","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.7.0","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.11.1","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.15.6","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-eslint":"^6.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.0.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.0.0","san-update":"^2.1.0","semver":"^6.1.1","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^4.0.0","tslint":"^5.17.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.2.0","tty-table":"^2.6.15","typescript":"^3.5.2","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.4","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.134","@types/node":"^12.0.8","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.32","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.6","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.4.1","reskript":"^0.16.2","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"dd756dcf59a85dbb9efb68f9f70a8e24845c7b24","_id":"reskript@0.17.2","_nodeVersion":"12.4.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Tw0TsMrqMRYXY7DBUAsYg/0OtJ4vPcbcQBvPqPgqwh9DaNTHjKFr96IipXhzbgpWRBnnzVwDkZYnwGIWn9bFjQ==","shasum":"3a2025b071e2054aebd9248144ac7fd4a502f783","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.17.2.tgz","fileCount":175,"unpackedSize":284745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGyZ8CRA9TVsSAnZWagAAoT8P/RutTLPM5UX6N0FkB/Gs\nsMomBCgl9P7gxKPzwVB98Xf8KjvtUq7BQgarAhsIYUj72KvLYsCtmkZX4EuG\nG4SYx2/+fRFZSX7RiQtUI2GwOEXeP0sVuaD14ZGKQ23RopSZqelBq28ON5PZ\nU0LCo1Mz/g0LG+s/aIgEQSeM9Y/mRduXlTdrzL5GXno6uxXPfhIWQVwyRm9U\ndHPkhKI4piq7WJbjTe3kcMGfcVcvRS4kUgRSxBwVWGmJgrxjv35xuR7pki8a\ncX2TRVcWsv8Cn0O7vmf1W29Re9S3haTwtSVwnmXxACaofd2mEDy89ngtWFnT\nHCrTeYMfvJOtWxyn9be2DQe1oab9HyvhX1ZwydNvllKLKY9e4PYeirXByYqg\nFMce6XiOoI2HWeVPXIMJDBMwcLf/n01hFWLVKDfKPhB087HCdUf8Nql37yo/\n8D1w5a0tJD5FLRdOAwfPxucI0Fk1o8D+peVMPvPONnvML2qpAdVWYRXFAbxq\n49zfl/NGBUxajE12Za0k5FGnOeFb9H8hAFlDKcunnaECUwZn8CMZ5PtHTIgJ\nHOEJqoOChtkxFasETbQfnBy28V6ZUtDAi7eLbpBYEpZf4xX1LYk/D9ZtOQLq\nWRQQ9E8PxYmTzjj/v/QXc0vV0381/MsU/Hgk5MkXDXJ0T8vXtwTMjTLwDfCu\nzTnF\r\n=Nmkl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWUuDq1kNHkPtFc9f3KTMxnudV6EI3IGa+J6oEHMNMbAiEAwxvBPAJRjJAa8ciCr9Nv8aUHbGfV21k67JYhxtIVKTs="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.17.2_1562060411260_0.6801600950636251"},"_hasShrinkwrap":false},"0.17.3":{"name":"reskript","version":"0.17.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.5","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.5","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.4.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.0","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.3","eslint-plugin-jest":"^22.6.4","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.7.0","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.11.1","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.15.6","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-eslint":"^6.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.0.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.0.0","san-update":"^2.1.0","semver":"^6.1.1","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^4.0.0","tslint":"^5.17.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.2.0","tty-table":"^2.6.15","typescript":"^3.5.2","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.4","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.134","@types/node":"^12.0.8","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.32","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.6","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.4.1","reskript":"^0.16.2","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"8dcd63ab5529547ba533b75ea8f08b25055bb64b","_id":"reskript@0.17.3","_nodeVersion":"12.5.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-EBjvT9GeahedwRU6HklZipMoYJ4wNt1+k6opxWRQVD6qljUZsNuqfkpHEWCB6bD+DLx4yFx5JAGSXUuCMbhkoQ==","shasum":"c0253296e47a2ba7d1850c295f242420d8dc7955","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.17.3.tgz","fileCount":175,"unpackedSize":283986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdICOLCRA9TVsSAnZWagAAe+0QAJXFoz75S1yXP1KFJVAc\nr5FnsuvWp0+pdXH58qQ2urKwjkYXBp25Ax+zsNMDscOE9Xmbe1fFIF0uU/q6\n2iCMWMobDkyqNUjyHt434/aUe5DXH1n+CFv351oe2HwT/Co92qb/hXZV6g0a\n0H7Xhj8EwwXD4NyN0jmkC6GRmrN7CYPgmhYLmz7mwOYsstNbzGsTQogPgtXY\nMAm3GErr/DvlSwYu9mFdBrnxadT1KRKDPCqSk23sTDXEAAUYbDVVhYF4FB3b\niO1IQq3pGCZ2wAbUbnmHvUIp9cNA5HGYbO/Z2R0LYNu/R2ZoURPXQF+ixHTQ\nWRMF/mpiPI+zMtVM0AMmQUGgDGZSd5moHavKBtb2GMJ+UoVbxHd1vAU3xfgM\noh7csMow7yXoa11Otwaz+wbtLh9Rusz0rei1MqPYE2wb9iXefvgjhmp/LIvY\nEYB0xYDUYgOJnTrLC+QXD9ri1/YqxQg6iuGSlqWkz0R+Rrvd48ctfhjk06OC\nZVBHtNoxyAT0V4TddThxCMPRZGodcsXp3cCdDgZ0qYwmfgBW0OZNCdtDIsKR\ne3KzRCBdVNzQvmDbESTTmq7RWz1AKAYOwhh1r781+9Te6vW5njQcFoMyf2hT\naf+4XeV4E4D206DqByqZeMv8oVGDS6PKnBwOSAyOpmdLwM5M410Y9u/4HQAX\nL9xn\r\n=FIEW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH6aNDj5E31Ut5eKcTUpdqdQBKNK+2hBUsdGysxVrYK6AiAZZ/cpMEwgjKSPHx072zTlsqiGq5NXZFmk2oep2/b8Vw=="}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.17.3_1562387338822_0.41469926549630265"},"_hasShrinkwrap":false},"0.18.0":{"name":"reskript","version":"0.18.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.4.5","@babel/plugin-proposal-class-properties":"^7.4.4","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.2.0","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/plugin-proposal-export-namespace-from":"^7.2.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.3.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.4.5","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.4.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.0","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^5.15.3","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.1.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.17.3","eslint-plugin-jest":"^22.6.4","eslint-plugin-react":"^7.13.0","eslint-plugin-react-hooks":"^1.6.0","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^9.0.0","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.3.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.7.0","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.11","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.11.1","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.15.6","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-eslint":"^6.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.0.3","rollup-plugin-postcss":"^2.0.3","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.0.0","san-update":"^2.1.0","semver":"^6.1.1","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^4.0.0","tslint":"^5.17.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.2.0","tty-table":"^2.6.15","typescript":"^3.5.2","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.4","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.9.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.134","@types/node":"^12.0.8","@types/rimraf":"^2.0.2","@types/semver":"^6.0.0","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.32","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.6","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^2.4.1","reskript":"^0.16.2","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"gitHead":"d2621edba82a53868e0f6f41be2551195cd9244a","_id":"reskript@0.18.0","_nodeVersion":"12.5.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-j69CNzLwDHAqyUt9JE/NPznGuY/GbVtBYkDtDPpsA7JoOafW0s8Omzkdcr7XdJgQN6MbTV2VcczbNRFREQGkDA==","shasum":"7fd6896a916f906b5f23ef43903acdea4bad8d55","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.18.0.tgz","fileCount":175,"unpackedSize":282951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdICUfCRA9TVsSAnZWagAAXbYP/RvcX7/MXMCZMCcho9vk\nXIZpI7AP1zmesmk+cTwMeDYwXiFlT8igfFjpFKoOy7eOVjeqEEzHKdrwvFIY\nVH9NGnHBuupzJ3SGMgZ0CHunMbE3gq0mK7FPkVjp6LMA0QYrL238JfGz5JtM\n0K+8brk4djLL71eSxJafRWR2HXlLRxez0Zs+4rm5CAvrQMemq1Vy1kZhNsbD\nSekttdQzG9U6Kf/1Ne94G2fpQg5A38NX4W9Qn4mkszOLXuLWefcFCVp+GU0T\nE3VUT4IVu8gdBN0y/J4WK/23P2SuhZRCMnJ/9WhaM+0bCCC39bgfGBrvj9/g\ndc+cF8ZF0M/l6Nj5OQQ++f+M96/Lx/rocYCtoUl1gGAWKasMZy0Osy3CwEWH\nJ0tjEbWSpkwr86jf6rD5GZlBiDUh8qHWPzr77e8aek65rJ8ifFEUAJoAv43t\nbCNd2kmZyeo7ui6iv+py8DwyIVdlKeE5MaTnx/FCRMF0U7gvlrPHSDIJRtmh\ny6I/HkN4PhurJciT/4H9OgK84YBj2NJiBL3fpa2x/VfGokJo+i1UpTvc3ZGq\nSEtVbpzU7jdtaDZouC0t1v4ROcDe+85AqqiAhFDsUhbPHnjxGvlJ4n4iRHjy\nKUX0EMR6i2J0zVf0m8Mjcb46EVxU1nirR9swU0NipGR8Xb3e+EN/2smSke9U\nvVV8\r\n=JqER\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8jnDd0VwEWF6ffWNDbtGXhw1Am8wT93Me/QnWdjuAHQIhAIcQJNxPTIrAOstDXdybpl0YJiWPQLzlitHzqYtOC+X9"}]},"maintainers":[{"name":"otakustay","email":"otakustay@gmail.com"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.18.0_1562387742732_0.7851524759230231"},"_hasShrinkwrap":false},"0.18.1":{"name":"reskript","version":"0.18.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.5.4","@babel/plugin-proposal-class-properties":"^7.5.0","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.5.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.5.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.5.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.5.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^5.16.0","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.2.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.18.0","eslint-plugin-jest":"^22.7.2","eslint-plugin-react":"^7.14.2","eslint-plugin-react-hooks":"^1.6.1","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.4.1","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.9.3","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.13","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.5","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.16.7","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.0.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.1","san-update":"^2.1.0","semver":"^6.2.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^4.1.2","tslint":"^5.18.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.2.0","tty-table":"^2.7.1","typescript":"^3.5.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.1","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.4","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.10.2","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.136","@types/node":"^12.6.2","@types/rimraf":"^2.0.2","@types/semver":"^6.0.1","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.34","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.6","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.0","reskript":"^0.18.0","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"@types/webpack":"^4.4.34"},"gitHead":"870b2585d316bb5c96baa1685736e916acde657c","_id":"reskript@0.18.1","_nodeVersion":"12.5.0","_npmVersion":"6.10.0","dist":{"integrity":"sha512-Br7YbV+i+ZN9/ctimAMUWpJ4B4JyIHD5Rz1jzvoCPI153n4ODXkpm/Wn6C/sc8f9yIm1gYwcUgLjjfRG4t9iJQ==","shasum":"ff280931fd4f446ef15e26102fe44cbb03eb9983","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.18.1.tgz","fileCount":177,"unpackedSize":283948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJxa1CRA9TVsSAnZWagAAU5EP/A4EOdJwAbE1dFWX5e7X\nXV3yYXhNTeSs+mB+jQQNbIypiOGtSKk79lZaOUyg/po9OgyJ9zavHyTGNnAE\n33NY+5SZQsL5xKDNWRmge0EmQUR4fbTzmPFMx2dds3d63MVdJrd4kbY3FbOZ\n74q/Kh0fxAVshV6eVC/c3iVX64UN6WeEBzNvZIs5HIV8WqN/UiG1xopJr1HS\ni8Vythcr9+/ZMvxUwo2uGTjmA45w8ipWZRnQd1Tihd3i+o52NFkMHB7HnIEw\n5I/yVpsIDzUcfSRZnDGH0DijbaXoTJ2aXAxQHDfuqFyh6iwtudahZFnJ1Vsq\neg3Hfo1xmurxV+40jpehTW+Ofh53T4XZRLFPEG9qcw5oqn6a2RnYpC1Q3cy/\nnWNlRwlnzD67ibxW2+GgpMbjQmCrYfaER1/MbDlc+PcRAzr7pCGuLQK5s4Iu\nvYDy7SyOCKlZoIqmTNFtfsZDbuK7HF/34x/3sBjc1qhHk+HQlVkGb/vDHmt0\n6dr4Rpr/nnP/HS6heoKyOs/VwsUmwNWeyjz6DSgx3r5F1ICsrfFXk5b719Wo\nDaM2vxCTiNv0ptj+VXTyTrewNPGVm9bhTIDM4SyM+Zxj15UV+MqGeYXgdtIe\ndjTgYWwVimXQC/p1m1z9MHaDbHMN2PEB4hLkKKecJgUcNtWrxT6UgtHwOpsZ\nGKny\r\n=M5j9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBfXu6ctoNF+SP2/qShVDBiBUTGskJjQJAGHfJMg0O9gAiEA2uyXVuuB8zVaXMkpZv0FO2cDkAItAfmvIutZ3fJX/ec="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.18.1_1562842804895_0.07179265423276537"},"_hasShrinkwrap":false},"0.18.2":{"name":"reskript","version":"0.18.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.5.4","@babel/plugin-proposal-class-properties":"^7.5.0","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.5.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.5.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.5.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.5.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^5.16.0","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.2.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.18.0","eslint-plugin-jest":"^22.7.2","eslint-plugin-react":"^7.14.2","eslint-plugin-react-hooks":"^1.6.1","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.5.0","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.9.3","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.14","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.6","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.16.7","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.0.1","rollup-plugin-eslint":"^6.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.1","san-update":"^2.1.0","semver":"^6.2.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^4.1.2","tslint":"^5.18.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.2.0","tty-table":"^2.7.1","typescript":"^3.5.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.1","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.4","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.10.2","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.136","@types/node":"^12.6.2","@types/rimraf":"^2.0.2","@types/semver":"^6.0.1","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.34","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.0","reskript":"^0.18.0","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"@types/webpack":"^4.4.34"},"gitHead":"032113c0c57d1f3db41327e2fc3b95922c27e630","_id":"reskript@0.18.2","_nodeVersion":"12.5.0","_npmVersion":"6.10.0","dist":{"integrity":"sha512-uzvX9w0oH2bIohZtINsYAlX+BlOcyYqLcKRyz7MVck9jrhK3GlX3/JCAt4aN9Ff0tNpmNPgebXV3mexmU4750Q==","shasum":"d66a42370d7c528670fc64faa0aed6eaf218bd5f","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.18.2.tgz","fileCount":177,"unpackedSize":283948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJ+cZCRA9TVsSAnZWagAAxoIQAIYVAImYZMrZKPQPIeEV\n4GKRpA4FudWAV5dcFMnGi7AMVfMPGnN7qden/0dvWkskC39cKR/FoU2uJHza\nsZlSRwVRoyChSxLmUx/4IaTi9A+/JNJbGGn0ute7em1Ba32B/Mo4C6r3XHiS\nsxrdUKbpsmh9QfHkzYkCfakL7jE6bnwRMFvAyIr9vVFJCQQYTR0KcFI95oqx\nSE+DybV2Hruy64wtvm/Z+A/uYXamiQk8WiQ6rpN5JtSocoys4a6ZRkxoaQSf\nkpNau/8KVdQEvh00HRAzH8kSda5w7vwbNU0Os7jAHI1ecHaI0X3GC8O17znP\nCSUlFMLv5e+rCli/9+tQRwASJw6myjN06U0YTfmORIMZPSO4TDQHR69Epk2f\naz7nRq7Kyp6+YIV4m5LA7pdFGfvB0LCHEsRC1aHgvtUdLEyhN1cpmJXn7XMr\nG/0Jm8zjsR3EmhlocjbPRoukKqxzNClvTFXD3pZF6fKgP37RimRYBc8McoC4\n0mXtStnyXy/OAstaN46e02SYnkBMWrerCX9H85Jg2iKX2mTNJdRyPpxh1Qje\nCbMLeHW51qgonbKUknUoC/MUFCbvZJ5/LWx9dSP1Rsl2E1Gfr9y0Kvz31u1E\nInY1G0Y+viGTHmd6UhKnLC3rn7sIq61ow2JdwPyb4jDTZY5QlwsPKpRVaAnp\nvx4r\r\n=SIQs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmgGQ17lZXs3UUI4MJ6Ua3DSOxFTdNXGXvi9AbkfIbPwIgTnDarPDFIydjJ7uzHFSmiX9vSynWeWbZNaJQ1UzB7LY="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.18.2_1562896152763_0.5252733609251055"},"_hasShrinkwrap":false},"0.18.3":{"name":"reskript","version":"0.18.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.5.4","@babel/plugin-proposal-class-properties":"^7.5.0","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.5.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.5.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.5.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.5.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^6.0.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.2.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.18.0","eslint-plugin-jest":"^22.7.2","eslint-plugin-react":"^7.14.2","eslint-plugin-react-hooks":"^1.6.1","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.5.0","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.9.3","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.14","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.6","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.16.7","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.0.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.1","san-update":"^2.1.0","semver":"^6.2.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^4.1.2","tslint":"^5.18.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.2.0","tty-table":"^2.7.1","typescript":"^3.5.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.1","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.4","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.10.2","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.136","@types/node":"^12.6.2","@types/rimraf":"^2.0.2","@types/semver":"^6.0.1","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.34","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.0","reskript":"^0.18.2","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"@types/webpack":"^4.4.34"},"gitHead":"2fad04efd296db89173a7e4da22700945d1ddbb7","_id":"reskript@0.18.3","_nodeVersion":"12.5.0","_npmVersion":"6.10.0","dist":{"integrity":"sha512-kuiEROcYMcrQvsT16GHBS6tDhHgkyj6iQ9O1VGrfXMs0djr7rU3JMgobQxlH3zI4Q8YGput53cgedy/VJcVNlw==","shasum":"eb2366fe15a74e1296cd71d30e18bcb80c90a179","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.18.3.tgz","fileCount":267,"unpackedSize":307116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKAZaCRA9TVsSAnZWagAAlIYP/iFHYRWUGrGbBohYuQ8s\nNjYb5ktDhjCM81FGJxB7bTttDxOndkriq+oVS4CEfP2xAFqni7zN9A6Zr9dB\nx5shUDwMlf/aLNn1aOntqaK8wpO5iXRe6sVRTM9oKX5el9NEAapwO8oEo8Wd\n+r0fDUFjZQnwG3pRSRWu6mrfkeRiEVD2Su7ZNF/FwaQQ8sF+V119KZfY8aIv\nB3Fc6OyrkiWpQfb/mfyWYptys3lxI4IcakxihK4iKKXFB3D4HOuMLMF44EUQ\n6ZmnsJqf6jf97gzlg0aeX6Oh/kCUNEzbXm4Z8Q4gaJtTlEH+rpXLoi9gU87v\n8+u+YpVSBdXzoMFHaimEBgIMVVuzfU+vOEEvho728jYuB0oAVk1lQIlsuA1K\nMPAfqhlh01qW2W9ch5Q4ETMQFqCLt9ujgwPPbfdD7Uzua5/TtZVOb93BeLd8\nvCQnMN+j3oXc7WV62YFOseyjIjEnvhSIN9nVM9xogRNO65+egQIGPJ1S2x7u\nenQ6/IG32dwI6RYsqFsGzwQujkDVxOGjiW6WHnC0d2U/etYmjN8ukDyHLS69\nPx37J3drp1RiBzI0rY0NKcT0O5JzFG7F1ik3u3J3vGBM1qf7UQh0eiL4P1VU\ntK9y4nMiGPwHGwh9PhQHhQpMeFm3AmANb7XKc6WVas6xmS5SDA8pcKK+2rFH\nLOCC\r\n=Q131\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICLTMpyQBncK6/8uvJ5PpJVjFW65Ad9nS3SuNoQzcPChAiB2hzijiwmvdyj3WgMATWdTikQp+bdWFZCGWOhNPV5x6g=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.18.3_1562904152891_0.8287508070165643"},"_hasShrinkwrap":false},"0.18.4":{"name":"reskript","version":"0.18.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"tslint -t stylish \"src/**/*.ts\" \"types/**/*.ts\"","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs tslint -t stylish","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.5.4","@babel/plugin-proposal-class-properties":"^7.5.0","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.5.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.5.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.5.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.5.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^6.0.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.2.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.18.0","eslint-plugin-jest":"^22.7.2","eslint-plugin-react":"^7.14.2","eslint-plugin-react-hooks":"^1.6.1","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.5.0","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.9.3","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.14","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.6","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.16.7","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.0.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.1","san-update":"^2.1.0","semver":"^6.2.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.1","svgo":"^1.2.2","terser":"^4.1.2","tslint":"^5.18.0","tslint-config-airbnb":"^5.11.1","tslint-eslint-rules":"^5.4.0","tslint-loader":"^3.6.0","tslint-microsoft-contrib":"^6.2.0","tty-table":"^2.7.1","typescript":"^3.5.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.1","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.2.4","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.2","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.10.2","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.1","@types/html-webpack-plugin":"^3.2.0","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.136","@types/node":"^12.6.2","@types/rimraf":"^2.0.2","@types/semver":"^6.0.1","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.34","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.0","reskript":"^0.18.2","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"@types/webpack":"^4.4.34"},"gitHead":"fa109132c0f4fa366535b9a58c8467ed2771a8e0","_id":"reskript@0.18.4","_nodeVersion":"12.5.0","_npmVersion":"6.10.0","dist":{"integrity":"sha512-38UrFIL4qAUQp2Z+I2JJFuMgxH8fRdwPliERxAnTziAl7vgnMRyrveWCpCkJPuHb34rkLqsec+1rZSZKoKJvVA==","shasum":"af8d88df8c4bd204555e6ed10f1253370e05ad08","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.18.4.tgz","fileCount":267,"unpackedSize":307040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKBD3CRA9TVsSAnZWagAAFjoP/3x6X2y7CpgkUyeXzJxX\nBuFWtIq8KmhQg+em7f+WPIergY6CvuuRcy5SRmc+WkqV2vsr9saZd407G2/G\n4NJ4Jb5wiZo5P4bgV2pk5rz1aphVzY48IQnY6UkkogrWTZfcVjXWnRKrHdu1\nzl8g8sS0hk+ZjX0dyjzD5BndjOMS5/V3lDxXthjEe3J7r3Fn+YWqq/PC4YrJ\nAAxdVkmGh0wGUobDNeugjmjDReFSTHt6RjpzJhSnDFVgOwMYCELi2RfzE+4p\nSPG8gS+B1ECIIQklZ/lpfxTRV/378aPGdhRymDEuKe0wtq4Nmq5pLg1CB1Dn\nJ15Y+PeOvtSZsIqOv7AY/bplxHxcacmPg1X4NG4gIFioYnfAHc3aj59TyGCs\npC3OGfvTuo2Y/vgTJd+BXiH6plkOv5VwUptQWRgFi1Wfl25ImecwvgIygbGS\nwHZJUWmYmPhZdljTyVhM6jGzl5pXWwTIrFnAKyDnNT0qcaifFzgMgOl1xP+D\n7nK2zE7QT7vnRyH4oYLGOP5xKkb2HOOvEdhtcFNfmuXkPDBhi/3qS2yiDWXw\n85JBodAyqfx4PqHUZ5+nXORLnWN+EX8yUKTYmXDJ8t+Ww62xvpxQHsfKRiEh\nEbKQpEgjW3r05Vw8yd3ouH4cp/rPVgq0r22FR5o+PzOcihWXxzGHWUECjlWH\nFy1I\r\n=7piC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCH8iG6M/Pqf0k3HgZ+hNizZJgkGyrB7l0LUwohmo5zpAIhAIHYW2eLcHRRL3TfQLif4INW3rYEVzE9ev4cKTX+hMHU"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.18.4_1562906871172_0.0693912910717609"},"_hasShrinkwrap":false},"0.19.0":{"name":"reskript","version":"0.19.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.5.4","@babel/plugin-proposal-class-properties":"^7.5.0","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.5.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.5.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.5.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.5.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^1.12.0","@typescript-eslint/parser":"^1.12.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^6.0.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.2.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.18.0","eslint-plugin-jest":"^22.9.0","eslint-plugin-react":"^7.14.2","eslint-plugin-react-hooks":"^1.6.1","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.5.0","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.11.0","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.14","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.7","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.17.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.0.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.1","san-update":"^2.1.0","semver":"^6.2.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.2","svgo":"^1.3.0","terser":"^4.1.2","tty-table":"^2.7.1","typescript":"^3.5.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.1","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.3.0","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.136","@types/node":"^12.6.6","@types/rimraf":"^2.0.2","@types/semver":"^6.0.1","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.35","@types/webpack-bundle-analyzer":"^2.13.2","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.0","reskript":"^0.18.4","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.4.35"},"gitHead":"3dc86450664b54c521d4e442a46f17d8772b5eb2","_id":"reskript@0.19.0","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Ga9DNPEQsd9wO/zZqic1IHJJTWtOqaiwmZLFVLKKDJdC4+mVbFraMzaoIzNhiB9sppM3oDuhLH0kmyM5uAO6tw==","shasum":"32c804d83acef89e00ce6e161787c81fb707e897","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.19.0.tgz","fileCount":261,"unpackedSize":308361,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdMYDaCRA9TVsSAnZWagAAwwsP/RZVDttQg/nxU/p1QLG3\n/7BmBPq/uLo8caw5iP0JQifTUZYzhlqYaEQHDznbZ40asLXXl3/3t+ZUMPC8\nXcrpeTUeHDukfPuAhqG+e2TYbWVr4Uy9ogJHyCLASgdgdGbVX6UZT2xNa+Qp\nFvrqpPRNIKmxM9X6u/7o5H5k6KHLw26IuPtzA7dVnqi9hbAR6i3ENxVZdmME\nyAz2tla6Vt7tjJ/NlZmEGgrJwOLt0mfg5qLI/BLoF7J1jhkuqZlV0i6H92B8\nHESqE2dGhFNBcJ1i0lYqhdnaLUxp+P2E4UrDGwJHNBjYJP+oGhKaTpwdFQ/8\nNozzcoEadYXQLagOTeE8DzN2gNjw4gN5+Kd/l4lL52/6dPEz035X1jmUctgI\n6YlWl3R3DT475Fs0bCQJhlCxFVbHvfe3sYdsUpJ4yP7ERXxjof9Rjs1jZXDn\nvNBnVLTZ5x6lr81uUxuc6p153dGd6FSbUe1Oh8jgJA3a73uk62yvERnNlWrT\nuzJptZAHvxenu1WYEmYH1TF+itz4/oEl0JPHqGyWq+Rbv11jRcTa1MHCztz0\nQhpsaHtljn8xdp0HzhFQkniuJ4A0kBnWPwSIFhg7Ra4se2WSTN0QK9nEbb2O\n8+LLyOU/SrpkBU/GEGvWewumcn7dg4xse8QFNaB+KswaGHkWdG49568Z4w2O\nzO+c\r\n=iOsj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICpkrtdIz5DVVJVOYPuI5tOqTIcbqS/cnarazg980zXGAiEA/Xsy1EaJWWgxrCisiloih8BoC1N4uaY6AgnpD3Ug3zU="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.19.0_1563525338004_0.7346769102262427"},"_hasShrinkwrap":false},"0.19.1":{"name":"reskript","version":"0.19.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.5.4","@babel/plugin-proposal-class-properties":"^7.5.0","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.5.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.5.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.5.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.5.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^1.12.0","@typescript-eslint/parser":"^1.12.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^6.0.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.2.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.18.0","eslint-plugin-jest":"^22.9.0","eslint-plugin-react":"^7.14.2","eslint-plugin-react-hooks":"^1.6.1","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.5.0","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.11.0","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.14","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.7","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.17.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.0.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.1","san-update":"^2.1.0","semver":"^6.2.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.2","svgo":"^1.3.0","terser":"^4.1.2","tty-table":"^2.7.1","typescript":"^3.5.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.1","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.3.0","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.136","@types/node":"^12.6.6","@types/rimraf":"^2.0.2","@types/semver":"^6.0.1","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.35","@types/webpack-bundle-analyzer":"^2.13.2","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.0","reskript":"^0.18.4","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.4.35"},"gitHead":"25baed278eb4882aa0a83e90dc9fa467bdddd3e6","_id":"reskript@0.19.1","_nodeVersion":"12.6.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-rq/9sYfM5GIwANOeQWNNg6COU6Qgs15+GrTq+t5by9SX9CgVDGHkXO5Ew+XAAIFlHapS//kdsG7YmTuch8F4fw==","shasum":"bf6fb9bd40e3379cc247e99cda7a013fd7420f84","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.19.1.tgz","fileCount":261,"unpackedSize":308842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOngwCRA9TVsSAnZWagAAtlQP/iPIDHz9ZICCJHdHz940\nd+Ddhkm3aqI8Oo75/97opSny/FFR+szx2SQUuWTmNfByuxIQ9LdusJvvqPnR\nSSKbSzCp1Sxs06aBlPe5E9u2fGH0qt1A2h1Qr1Kf+n7NoffI5nYLiiph7VXv\na2KxON8SxAiYsxCwjrwJN05s8K5fFwIi1CDIwsnPmFxDAJXuv+oJNuv2Z1at\nBYYgd8LX9bQxAKy/u2g8SBpUeMQ+aqUXSxcA2wQaor7wuGbqV7pqezvor4wH\nsd9isErMmNtqsp8ls4L0KmOs1dWWH2iwHb7w6b3X39EhbgryvIlFAU+FYfpJ\nlEr/pH+gtZBplS0iglmOw2d4pMj08Mi0EIjAlHDK8rDB/KzMvByjx3S5KVo4\nOL8LhVT/1h+JDoywl1vuCkH47F5G6+hPFbloY1QZhvUWm/c5zqB4Wz/mMTQg\nfvlRRM9dPOJsPTpSZH/AsNAO1RlluSeufPkdj3lrUhayr3OJvEWVAMX/3KPi\ni7mW4yYh3CXnuV/6ABuPXPbdxX/UiuvFijhWM2PIPzuWhRTwg3przKogzsTU\n/i5Pn/hNuvsThQQcohuGXllbQhVoo2fwiRO+60G13EWigmlVZUMXUTahkPFH\nJWZwyD/jqFCsLT/atTV7yi7OFfUs0TY9c8NNbT6X/SSg6hHgba13m0lkEYc2\nfKpp\r\n=fBCZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCRrtduTc/4fxIUuOlhxd/uB64SCcSfeBhuYMQk5LLjAIgGjGp7RmJaZ3FBRYb3zrkBtVvErbdFy/b6sh8VCjWluA="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.19.1_1564112943132_0.276983417474179"},"_hasShrinkwrap":false},"0.19.2":{"name":"reskript","version":"0.19.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.5.4","@babel/plugin-proposal-class-properties":"^7.5.0","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.5.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.5.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.5.0","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.5.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^1.12.0","@typescript-eslint/parser":"^1.12.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.8.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^2.19.0","copy-webpack-plugin":"^5.0.3","core-js":"^3.1.4","css-loader":"^3.0.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"^6.0.1","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^2.2.1","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.18.0","eslint-plugin-jest":"^22.9.0","eslint-plugin-react":"^7.14.2","eslint-plugin-react-hooks":"^1.6.1","file-loader":"^4.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.3","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^6.5.0","internal-ip":"^4.0.0","jest-cli":"^24.8.0","less":"^3.9.0","less-loader":"^5.0.0","less-plugin-dls":"^0.11.0","less-plugin-est":"^3.0.1","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.14","monaco-editor-webpack-plugin":"^1.7.0","noop-loader":"^1.0.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.7","react-monaco-editor":"^0.26.2","regenerator-runtime":"^0.13.2","rollup":"^1.17.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.0.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.1","san-update":"^2.1.0","semver":"^6.2.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^0.23.1","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.2","svgo":"^1.3.0","terser":"^4.1.2","tty-table":"^2.7.1","typescript":"^3.5.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.0.1","username":"^5.1.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"^3.7.2","webpack-merge":"^4.2.1","webpackbar":"^3.2.0","worker-loader":"^2.0.0","yargs":"^13.3.0","enzyme":"^3.10.0","webpack":"^4.34.0"},"optionalDependencies":{"enzyme":"^3.10.0","webpack":"^4.34.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/copy-webpack-plugin":"^5.0.0","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^4.16.5","@types/express":"^4.17.0","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.0.3","@types/jest":"^24.0.15","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.136","@types/node":"^12.6.6","@types/rimraf":"^2.0.2","@types/semver":"^6.0.1","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.4.35","@types/webpack-bundle-analyzer":"^2.13.2","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.0","reskript":"^0.18.4","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.4.35"},"gitHead":"f9b3889d7c1d8500dc91a2c7626369ed36f60151","_id":"reskript@0.19.2","_nodeVersion":"12.6.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-1bzfwY8omFIbtzWZWb/65NVDtyNguRxmV1+PqNbw8bCdF+qiv8LgnX3pOu6GMNDohnWUNBOOPdfhFkQbVoYosA==","shasum":"cde861e0b71368d4aa4ed33af43a695b94bc7c41","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.19.2.tgz","fileCount":261,"unpackedSize":308985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOnrFCRA9TVsSAnZWagAAaFkP/1g3A4U1ZFC+MamEWw7s\nRSfpBV/1R4C6OA3g4HTIl6RShKhl/aHjo9DnEmEwItiTxpvwEXHiVFHCTsI3\nL+Bi5O4XXPI/YxDtXbuUUkVHMDxt+DMcVOKuS0Dc0Kw3pzOFliMTSuZ4IMt5\nBw09ShKl7Q3v1b62ep4qI5HnXa/Rd7QWHi6LJONH4PEYnPxCSwNvgK77wON7\nJzdvsP3LBNa8pnkB0q8JYC6lAJJtWRH2yMIBsTUleDrwv+GuoyS1av0F9MZT\nXTSLG4nz0Tf564jqfGiPQM/waKiMXH9ytmBO+fQBuEzJsMP8J8vtDoBZh9tu\nzMHtseNAXa0nxKKsadV3zOXy5xc8dqBTBE56pRlCK5QO19OEZtKILCJu3w/f\nTc1oJKTzAbRa8CyPmJnmLSM66QByrdpgVlykuGUJb9c43bqyEiqhZG2dQjlv\n6BOW6oEDa4gQt9X7TFs0ozo5IzINTKCH+zX//2RZojpdmBwpvepQjHhno/pc\naLamYJK8aQJcJjyLxHlQKpDovWTzUjnizQlSTh/+5UHq0vpgETUDN7UcR4gF\nq4q69h9qw0rescXLrtS4SnHP4x9h5fz5ZlHwFE8Z3dPW2izrfC5WKfrKe7hO\nVUq8eXvRPVHsrh28UrhK7xjlD1KnTrswS2toPIrR0q6upYh4QvSIcUX8WkHO\nX7vr\r\n=SEH2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEjqFofb1RJrqmc7f9jq3llAPgl4WnAX8gTQ59jToGLoAiEA65w1VXQ8o+/iPH2fIX01DbUeuSUjjtbTizl0feDhylU="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.19.2_1564113604423_0.03629390271430255"},"_hasShrinkwrap":false},"0.20.0":{"name":"reskript","version":"0.20.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.5.5","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-do-expressions":"^7.5.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.2.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.5.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/traverse":"^7.5.5","@ecomfe/eslint-config":"^2.1.0","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.6.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.0.0","@typescript-eslint/parser":"^2.0.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.1","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^3.0.1","copy-webpack-plugin":"^5.0.4","core-js":"^3.2.1","css-loader":"^3.2.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.4.0","eslint":"^6.3.0","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jest":"^22.16.0","eslint-plugin-react":"^7.14.3","eslint-plugin-react-hooks":"^2.0.1","file-loader":"^4.2.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.0.0","html-webpack-plugin":"^4.0.0-beta.8","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^4.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.22.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^3.2.0","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.12","react-monaco-editor":"^0.30.1","regenerator-runtime":"^0.13.3","rollup":"^1.20.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.1","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.0","style-resources-loader":"^1.2.1","stylelint":"^10.1.0","stylelint-bare-webpack-plugin":"^1.1.2","svgo":"^1.3.0","terser":"^4.2.1","tty-table":"^2.7.6","typescript":"^3.6.2","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.4.1","webpack-dev-server":"^3.8.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^14.0.0"},"devDependencies":{"@types/babel__core":"^7.1.2","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.1","@types/express":"^4.17.1","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.5.0","@types/jest":"^24.0.18","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.138","@types/node":"^12.7.3","@types/rimraf":"^2.0.2","@types/semver":"^6.0.1","@types/stylelint-webpack-plugin":"^0.1.2","@types/username":"^3.0.0","@types/webpack":"^4.32.1","@types/webpack-bundle-analyzer":"^2.13.2","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.5","ts-node":"^8.3.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"a719e679ea4354d7833087dc5bb63f4c9c2ddb79","_id":"reskript@0.20.0","_nodeVersion":"12.9.0","_npmVersion":"6.10.3","_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"dist":{"integrity":"sha512-o6z6b3k3XEo8vmsdVnfhI9ydgtiXbgeznIqMcJ2zKHvijKOdBJ7CPILepXPdBxIuUOLJOxBc2FoGETrsgf12AA==","shasum":"46ec13d1b3ce086050cc58e773e71a1422c7ea5b","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.20.0.tgz","fileCount":259,"unpackedSize":309192,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdc1P0CRA9TVsSAnZWagAAnisQAITYX+2lgwdaW54Ah5Dp\nHd727IALSsyTSQnsb8siwizcLFaBAZ1RC40yAv2A+dKBe373N0lX9S8vXG73\nSGpGhieRJofvW7DWdh5YgxkWWyP6yp+SLBnLyn4jUBTlEDYveppCoFUZFs5u\njdJKLcmW/GGZFufWdMF0z9idnSCthEoMDfunywPSwJ9xrrXutAeUEFfVX7Nz\nimDo3h+fC1aXKH/Q8nsYvagaD0FYR5xPpcwsn1r37l69wDheGl2C7JYYY5Uy\ngPbWh4f6fcTaGRtERpNN+297rC//eR5P4lbR3LZHnNPo9FiUOZadRRyFVnAZ\nUsu1Jaw01CUOSY9NcHMG5FTNW6joixnUPE5eAdXZQl2iRy6RGMd8aK/f523i\nXdoOZ34hXyti7YqUabYmeTdrT1KmcuY0uDtSXIuVRrtXPu+9w/+/vXwWrQib\nEvbZenwHlKYQViZMNS/WnG0FYCnbmscdIhWSxVdeAsIW+kmLqmOxDLxYoR0S\ncSIOSTfCxK6MGnNlSSa6dLNDvpTPy2dHpMjXs+pmE3ISds1BjdistToWRUvN\nxiusUxPKaI2S6qV2I9J56SXbIrplnnfONkmfuFrwibpsuB/RFEkYcDobn5mQ\nSi8UTmCkCTX0gI8W+GMZJRfHajpAACMbZBMAZPIohr/Hcd4mCqQ49ytorMcG\nXiJl\r\n=Il7N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJG1Rtavf4de6NLVlkT50KFGpvzszLJinO+g2FrfNCnQIhAMJcND1If+c3w7zSVLsuNW9FDlGe21gg153wb1UHyIOW"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.20.0_1567839219365_0.7686482327114759"},"_hasShrinkwrap":false},"0.20.2":{"name":"reskript","version":"0.20.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-do-expressions":"^7.6.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.6.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.6.0","@babel/traverse":"^7.6.2","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.6.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.2","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^3.0.1","copy-webpack-plugin":"^5.0.4","core-js":"^3.2.1","css-loader":"^3.2.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.4.0","eslint":"^6.4.0","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-react":"^7.14.3","eslint-plugin-react-hooks":"^2.0.1","file-loader":"^4.2.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.8","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^4.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.23.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.1","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.14","react-monaco-editor":"^0.31.0","regenerator-runtime":"^0.13.3","rollup":"^1.21.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.0","style-resources-loader":"^1.2.1","stylelint":"^11.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.0","terser":"^4.3.2","tty-table":"^2.7.6","typescript":"^3.6.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.5.1","webpack-dev-server":"^3.8.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^14.0.0"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.1","@types/express":"^4.17.1","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.5.0","@types/jest":"^24.0.18","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.139","@types/node":"^12.7.7","@types/rimraf":"^2.0.2","@types/semver":"^6.0.2","@types/stylelint-webpack-plugin":"^0.1.4","@types/username":"^3.0.0","@types/webpack":"^4.32.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","eslint-plugin-reskript":"^0.1.1","husky":"^3.0.5","ts-node":"^8.4.1"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"d7da70883b24e69a35bbab1209e4e176b5e32eae","_id":"reskript@0.20.2","_nodeVersion":"12.9.1","_npmVersion":"6.10.2","dist":{"integrity":"sha512-K8cx7RS00pq5SF7QxC7qGSMKWKTwcOsOeZCx6dmYwEs7bA0VmTSA08ZriWhCaM/OePNloHLVkemuwq45m8Xmuw==","shasum":"4c02d4a0e505701c38f635527b4d0dc28df8aaf9","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.20.2.tgz","fileCount":259,"unpackedSize":305526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdixhICRA9TVsSAnZWagAA7kEQAIHj0a0xy1o6SOF0yzzX\nSoQs9iwRtkjtas+dVnKUOcbX3n5fW1xYubLRhgPUDuG9WzwXwsGExmpI4UsE\nkkqBXd6nXch24jfj7Lar03X6A+XDlm01ozoCHf97muobVb1jvejOKvMaG0e/\npFFwwWmSWd/az6/A7yk+VG9We9EZOP3Wv2JGAxONlX2ZjOXW2CoI5piQ6bJr\n9JTV78bjzUe92qrQmuyK5uoSrI8p4iasEE2JKoQsC6q45ewkYIAree9Sz80g\nUQUyP4XXDjyazdWsN6U3e5HG0uj8AdaI912y9Hw9UJBnAe+zQhcUtt7q0cl2\nuwAYvuLEWV17kqsKh5plE+3BLUbwJfHij4ZninCpAkfegT6wSIEra7+KH6h6\nB/w8CwSuxIhOI0Yxsxs4vwTa6Z1HMRO7hZWbW6n4UQmDhhBaMsWu4XG2wT48\ntQg47DVu8rt8p52UEmlMfzOHQN2Mtvlj4Jp7WR/LrwrSoZv/GUGspUXQWQ9V\nxmSVvnYbfx5SxLqZ5ObgptuV4TbsL20zaMx0ehgjkem69mNYCq1s5oJRXmGf\n+ONKN+RjcF4TL1eH8HcMA/giPvQ/wFDNK6fdtKZ3h/eK8rMiKaDB/yugiS+k\nrdZmpav8TcKeEkxy+1QoS9Xe4AioFqI/XkMwlp4O3jfhWfLdwyHXQxRdME5/\n3gxk\r\n=8ixc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVopwsIHrYBen7LjG9vD/CdvuwzNv1uZilV//dOWy24wIhAP+khi5sdd5RZ/ZkYQI489Jk4AgQsGLAHuQJVM6rTXXz"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.20.2_1569396807549_0.4068385033968449"},"_hasShrinkwrap":false},"0.20.3":{"name":"reskript","version":"0.20.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-do-expressions":"^7.6.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.6.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.6.0","@babel/traverse":"^7.6.2","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.6.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.2","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^3.0.1","copy-webpack-plugin":"^5.0.4","core-js":"^3.2.1","css-loader":"^3.2.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.4.0","eslint":"^6.4.0","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-react":"^7.14.3","eslint-plugin-react-hooks":"^2.0.1","eslint-plugin-reskript":"^0.1.1","file-loader":"^4.2.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.8","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^4.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.23.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.1","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.14","react-monaco-editor":"^0.31.0","regenerator-runtime":"^0.13.3","rollup":"^1.21.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.0","style-resources-loader":"^1.2.1","stylelint":"^11.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.0","terser":"^4.3.2","tty-table":"^2.7.6","typescript":"^3.6.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.5.1","webpack-dev-server":"^3.8.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^14.0.0"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.1","@types/express":"^4.17.1","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.5.0","@types/jest":"^24.0.18","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.139","@types/node":"^12.7.7","@types/rimraf":"^2.0.2","@types/semver":"^6.0.2","@types/stylelint-webpack-plugin":"^0.1.4","@types/username":"^3.0.0","@types/webpack":"^4.32.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.5"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"0f6aae544d50a09073db1cff3c4413c5a4d62c4a","_id":"reskript@0.20.3","_nodeVersion":"12.9.1","_npmVersion":"6.10.2","dist":{"integrity":"sha512-eCWOVlVIC+UkFGU3AzpeDB4QkkFqWwp21rlG46BL91UH7cQ2simmIdwQMcbj4/0WK5P4CcMOvaBHJ9dax7DfcQ==","shasum":"024f5035217d7436c082862afb2865a6949ee617","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.20.3.tgz","fileCount":259,"unpackedSize":305501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdixnQCRA9TVsSAnZWagAARn4P/ji3GmiES3CLOUnApv+f\nN4cVxaX/7HdvvAhG3g8+gc7oVm1mXgJ7GjFPktWWn3Gv6fb+BYJ+4P0RZl1j\ngCIdZK5PAmUy4V18GFot7nrhANjDPwpUrsJBFjsAMC104tCdrmwZtEPmTeEP\n1I6yDBkC13gJhyTv8RdwaGjhOEE5PDN2S9kO9iu1ZkcxESdUmLvmmBUjurj4\nbeptCuwjfkP6tJwr+8imePB/5RvxSg8TAxkxlyFf1ydht6TTFZdhfRv7PFiH\nSd6YJYSFxoexPnF9is4V7ZStpOR/EmvIQPiztGeRo4CzqdFPPQxJhGaMlgid\nEcs0fugZd/DVF7hKS2zyUr4SUvfa52dlhYZlhcy7Fdy+aZw2ELv3eTYd0I11\n+GDm27Y0IJoCxFkKKAfjpY4AFEUju4vzVRUdeY+vCZXKaqqlbI6nuYKN6w7e\n6beILT+2OMalspmggmJQo6SF8CVdloOV4imlc2IHwGmj6dZc1tUB5KNhgl7R\n141tOPHfJpSGivFErJuQXBx4Ip7gA1tlYemCVtFGhtt0lJQFdTs0LzRTSRne\naKgtlAoBb9WzrlsGV29pBErLgOsdL6cW0+x5qm9lh/jeKklnaYZZH6M6/idW\n4OlJxpnOZuoU2yGY8eJf3wWFnvnr5KdpIKWPszYdfGGUB1+CAFfizWu76rNc\nV2vl\r\n=GTU5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqSVy5C1x6mn3CHEADsoMlC/MRRCNBJQyr9rxM6rA2hgIgZ4gCFKM9Ol4keEOpuj9of1d5f6sN5hp3RYecbpeICTQ="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.20.3_1569397199213_0.6597069731705831"},"_hasShrinkwrap":false},"0.20.4":{"name":"reskript","version":"0.20.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-do-expressions":"^7.6.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.6.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.6.0","@babel/traverse":"^7.6.2","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.6.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.2","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^3.0.1","copy-webpack-plugin":"^5.0.4","core-js":"^3.2.1","css-loader":"^3.2.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.4.0","eslint":"^6.4.0","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-react":"^7.14.3","eslint-plugin-react-hooks":"^2.0.1","eslint-plugin-reskript":"^0.1.1","file-loader":"^4.2.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.8","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^4.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.23.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.1","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.14","react-monaco-editor":"^0.31.0","regenerator-runtime":"^0.13.3","rollup":"^1.21.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.0","style-resources-loader":"^1.2.1","stylelint":"^11.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.0","terser":"^4.3.2","tty-table":"^2.7.6","typescript":"^3.6.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.5.1","webpack-dev-server":"^3.8.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^14.0.0"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.1","@types/express":"^4.17.1","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.5.0","@types/jest":"^24.0.18","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.139","@types/node":"^12.7.7","@types/rimraf":"^2.0.2","@types/semver":"^6.0.2","@types/stylelint-webpack-plugin":"^0.1.4","@types/username":"^3.0.0","@types/webpack":"^4.32.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.5"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"18fa4006dc6cb80e47528bbeb99e37a344c8f751","_id":"reskript@0.20.4","_nodeVersion":"12.9.1","_npmVersion":"6.10.2","dist":{"integrity":"sha512-j2hHdEo5SC5su8cSwa6EQmI8hit/iog3mGt88d2lul/5+xHNvw/fo3hqdoN0fl+Q2XJEIqMdfEHUGd7/IbQPiA==","shasum":"4f3c836d7a1c484609044bb5f6eb6a12bc3da42a","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.20.4.tgz","fileCount":259,"unpackedSize":305367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiyswCRA9TVsSAnZWagAAP2YP/3j3rKnMqqexJ3zmHYff\nxDXgaCN3yPRdXiw2nRYmIlF4e08PXoRF0arARaZ8yzf/r3Iz7PgmfsUfbHQs\n+oj2c3zVUMWF5O+iZqDXOLbitPOpcxBCc0d11bNyispzbudAptyK6SFi0vq7\nu6mDz4xB6+saV2P2LepIW3DMxIm8rSBYmooauJaf2v2LSSbo6pQCtm8gJ0DL\nDFnGIBjJHiHqb5vETCpAnwNSMAbkBvPJR06Pj093yUHXxBJ0kdtyh81hSoQA\n0G0RMsRbHjm+r0k8Dg02ybOmyKJI8eKDcArn5uzTQ9/SBasqBw1zFEeDatie\nm2aQw03wm1XzOiG4RSAluaBzMRBYj/WWs1wP6GosgSlIRxa4sJHVrVr69bmO\nbzbckXSbr7uZuYSrBjpxeDXbqnbASM2PH5QcDhgMNh+Hr/YTIjzS3MHtXTLn\n6XN+ZtDzp5OHaGDpCcGUs4qOmx/ptUm2dVg6H/EPBhWKjkAUFn7k/1BLwSAe\nmmcQV2SbGm6E7oF0/MduPUP1hxTb58thBybO2sX56yy79fyF/GDtdAodYRym\nvcIkxMvv7Mjzza4FI914APV+wqJ5DmvmGz2XJlBqy9j7UnvMB3EFmLpDKlkj\n77BoVhFlNj2SnXk5Cv4ggoOMqrzkVyBjZnwmrply9gnIL6kjLnf/bGo0yfR1\nE/EY\r\n=//Z8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEt3K+zFEi21o+dYg+Cm1m0Y+6UgAr8ZX2UXyoTpbOllAiEA7TlB43+qPn8SQg/S56pqCNWRFL0chbBFktj2Bfd7CfM="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.20.4_1569401647759_0.6783875016423491"},"_hasShrinkwrap":false},"0.20.5":{"name":"reskript","version":"0.20.5","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-do-expressions":"^7.6.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.6.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.6.0","@babel/traverse":"^7.6.2","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.6.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.2","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^3.0.1","copy-webpack-plugin":"^5.0.4","core-js":"^3.2.1","css-loader":"^3.2.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.4.0","eslint":"^6.4.0","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-react":"^7.14.3","eslint-plugin-react-hooks":"^2.0.1","eslint-plugin-reskript":"^0.1.1","file-loader":"^4.2.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.8","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^4.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.23.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.1","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.14","react-monaco-editor":"^0.31.0","regenerator-runtime":"^0.13.3","rollup":"^1.21.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.0","style-resources-loader":"^1.2.1","stylelint":"^11.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.0","terser":"^4.3.2","tty-table":"^2.7.6","typescript":"^3.6.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.5.1","webpack-dev-server":"^3.8.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^14.0.0"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.1","@types/express":"^4.17.1","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.5.0","@types/jest":"^24.0.18","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.139","@types/node":"^12.7.7","@types/rimraf":"^2.0.2","@types/semver":"^6.0.2","@types/stylelint-webpack-plugin":"^0.1.4","@types/username":"^3.0.0","@types/webpack":"^4.32.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.5"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"6cfa48ebdbfea9a136843694239afe8e5a9f46b1","_id":"reskript@0.20.5","_nodeVersion":"12.9.1","_npmVersion":"6.10.2","dist":{"integrity":"sha512-R0FHqYfU41UPCe2ynOVuGXtdtja9YXo1msxuWsQ1we9gIBn74qUt/AGs2+p2hQdD0A9yV3PT4Z4U/dbtOblbKA==","shasum":"db53c76ee532f21092df8379ecb60383bcf33cf6","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.20.5.tgz","fileCount":259,"unpackedSize":305176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjFFaCRA9TVsSAnZWagAA4yoP/3a2pXvtS1OvcYB/bxV9\nJPmca1E6tApsRJMZVrKVACRQkE/OyW+u6gZYkRRoh8QnYYdoTJ/zbQx8emCA\nKHNAt2pXETvYKHFMuBAZKhGgTW+qGX2hYhQW/y/UPbAum2+/m7gvndAEh7Dl\ntfOuIOtMUQDd11d5/xfKRJmPzNCisTWgrzhB4pddBVpXPrTbr/JTTSzpNaXs\nuOLn/Xp3VOrweQCzSGN7mJiwottRcErZZdGL8I39vJU+iKpxNVsqeie3cyog\nIRXWN+Yd6aENyzUHONhuKtrL8S28jxeELHDbuT+xEio7xcU+PeeSrjv5WO9A\nk7osG95HSlQqJxNnHeRwmiuJvb6Esn+1lSLcIv7exyR1y+Du2+a3VuD49+A7\nhA9ULwL9IwVEyTW96XOIJFIaIXtTa8BYWzXXRYmahkhlMy1qaYbzXIJq7upX\nK8I78MH0Kk8cOyPGxrE/as7MeMR4zYQm8nXcAALV+QzZ8GrmHNEgYaNhucqH\nUJmMZ2Ftnb06ASfLRPXoGwmgMCrbscXEVz94LbYHRYyUwKDrnJmaFfs16yld\nhCIJzGZh7hCduvEwSvE19CSYNNbnBtOIGzrBSUE3/RDFUySh97nNYVqVhlWe\nQga5j9ZVn+fs96mRmJ9sVdz4bTwUTVUZK4ZqMN0bgwfY7Il6pZYqjJ6o8GFy\ncmlQ\r\n=RMQ4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3e9l/ZcvePNBAarTfH+fpuOE9mChm6b4fzmT4sGMFTAIhAN6Y3DnWN+7ZS49pf1BdC4SE4wdbw0Perb2gQL0VcHh/"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.20.5_1569476953136_0.24235348875201956"},"_hasShrinkwrap":false},"0.20.6":{"name":"reskript","version":"0.20.6","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-do-expressions":"^7.6.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.6.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.6.0","@babel/traverse":"^7.6.2","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.6.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.6.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.2","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^3.0.1","copy-webpack-plugin":"^5.0.4","core-js":"^3.2.1","css-loader":"^3.2.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.4.0","eslint":"^6.4.0","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-react":"^7.14.3","eslint-plugin-react-hooks":"^2.0.1","eslint-plugin-reskript":"^0.1.1","file-loader":"^4.2.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.4","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.8","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.0.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^4.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.23.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.1","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.14","react-monaco-editor":"^0.31.0","regenerator-runtime":"^0.13.3","rollup":"^1.21.4","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.0","style-resources-loader":"^1.2.1","stylelint":"^11.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.0","terser":"^4.3.2","tty-table":"^2.7.6","typescript":"^3.6.3","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.5.1","webpack-dev-server":"^3.8.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^14.0.0"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.1","@types/express":"^4.17.1","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.5.0","@types/jest":"^24.0.18","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.139","@types/node":"^12.7.7","@types/rimraf":"^2.0.2","@types/semver":"^6.0.2","@types/stylelint-webpack-plugin":"^0.1.4","@types/username":"^3.0.0","@types/webpack":"^4.32.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.1.7","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.5"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"7ee767fa979c0e3da40a605473a60012097996e5","_id":"reskript@0.20.6","_nodeVersion":"12.9.1","_npmVersion":"6.10.2","dist":{"integrity":"sha512-2+pDu7vIg3wG65NJpaJK/1tR+yMKnhSPHs1XPlmp8B8/drlXDorf3P1VXUsD6drPEz40X2/vUJ33d0hmEQDABQ==","shasum":"6d03cf00c8e1d082821c22ad6fab99758d64706b","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.20.6.tgz","fileCount":259,"unpackedSize":305214,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjZTXCRA9TVsSAnZWagAAPYoP+gKFSjU+lZghI8Ggs8zN\nCa+pHflzwStmQqycj0qGvqeW1i46PLWCnh+cLI/zJUbnQ7rF2o2+io1msAHX\nxzAzwj9tbLxaXGCm8FK+b5EsGVa+VfoQAAeYBY9W6M8tp5rrk5ylfRefZ1av\nrtpYnMMLLVA2oX7c2p5GWj2hFVM1CW6ZnvqO974xbRps9Wk9hO1LGp5cbqwE\nnUJZP9LnaCFTS2TQxRPNyMt/TfR+0F6FmIxPvgcD9hQGk9n/zKfV7T0mWL+A\nJZEujPuR9u9uEPSfID5EuPsoR3fRzUNLk4wINTaL+tXOWHDMCFarxBbr9aaG\nUgQrpZTOxbxJqdk7uDCagNw/ZYTa3jS7SLFV1X5wAmbxOtT8Vo4dsCElo/BU\n7rqc1BSQzM/yge0zEvc9Y46fHK7XkRT/pICZ6x+483/jHofAO8joa2oy73uu\nQn6+9NrEnnrbLOs1a3Mzb8V9Wldb0YYJUtgzZQyuYHLwZ6um+oTpnMj43LBK\nByXwtqfIvAHvBfEOEngJTANp5IxYDCt3iS0P/BhENAgcKxc/xF0otIhfykY/\nlcKgjFD+pff8rhOqrjnGnNFs95jZK/pwzWVAPfflJb/kJ7UyprqzxoH5T903\n6DP4B8yR7/A/NCekRm03SkiOAlug54XFV/rq5PJ4mD80Lu/oDH6RPrK5UidE\nisaT\r\n=vkPX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEatv5UZNTqZla5nkOAfwSpJlAc/dN+Q05AZBQROSRM3AiEA+jnC0adKyxBYPHKg6AJUJagUtyYaCyjjgLIJ6j+8bM4="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.20.6_1569559767063_0.7354998479774808"},"_hasShrinkwrap":false},"0.21.0":{"name":"reskript","version":"0.21.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.6.4","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-do-expressions":"^7.6.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.6.3","@babel/preset-react":"^7.6.3","@babel/preset-typescript":"^7.6.0","@babel/traverse":"^7.6.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.7.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.6.1","@typescript-eslint/parser":"^2.6.1","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.1","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.2","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^2.4.2","classnames-loader":"^2.1.0","commander":"^4.0.0","copy-webpack-plugin":"^5.0.4","core-js":"^3.3.6","css-loader":"^3.2.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.6.0","eslint-formatter-pretty":"^2.1.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.0.2","eslint-plugin-react":"^7.16.0","eslint-plugin-react-hooks":"^2.2.0","eslint-plugin-reskript":"^0.1.1","file-loader":"^4.2.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.5","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.8","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.2","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.18.2","print-tree":"^0.1.5","react-hot-loader":"^4.12.15","react-monaco-editor":"^0.32.1","regenerator-runtime":"^0.13.3","rollup":"^1.26.3","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.24.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.22.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.0","style-resources-loader":"^1.2.1","stylelint":"^11.1.1","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.2","terser":"^4.3.9","tty-table":"^2.8.1","typescript":"^3.6.4","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.2.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^14.2.0"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.1","@types/inquirer":"6.5.0","@types/jest":"^24.0.21","@types/jest-cli":"^23.6.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.144","@types/node":"^12.12.5","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.4","@types/username":"^3.0.0","@types/webpack":"^4.39.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.0.9"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"8acb80d98ae1aa1eb34aac69b82a7e1cc7aad472","_id":"reskript@0.21.0","_nodeVersion":"12.9.1","_npmVersion":"6.10.2","dist":{"integrity":"sha512-T6S7hwZpMLgDde/2xvx9PpVDiFCPbckbotpxjuUXe9FlWef80YV/mZ+HQqAI6KqoMRkWWsg7ilqsyf/EOehe0w==","shasum":"28d497b657bd08d33c0b088dc2bc5c71da13b46f","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.21.0.tgz","fileCount":259,"unpackedSize":305425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwVHECRA9TVsSAnZWagAAk0YP/isR5yTRlkqtSRGzLiea\nT2JFk47qnZGz/dOklmRTnINklgtPNK5hUr+br6Uj4emk/mtHXItLvHxcfU1d\n8VKixRhKBOV3AnU79Y0lfKfyQ3r5PYOAXaztAROgzupNEq9g+gkSxFGLtKiG\n+ffT74zh5riEBwOjylmY685vcwANjhLO/v7i1ZNEh5E9sdsnltBviTkAp1GQ\nDTlPZ0+6mOJLyp29/xyOjjD6BJeIlYYT9DxvGPtUFDUIC5QUjNhr/IHSzj6m\nadZUTBFgIhJSnikvQkNjDxepVFBiWlP7kcJnaQWukBEx/3kFZrOxrwx3VQRe\nKXa10gZpk8UoiUfY0nvF6dUXeVaMr3Y8gkNu7G7HGrjUrRirJpn8SgUwsTai\n4IcAkrWAaeGzxB4NrXNzQyagGQW/uUcfeZwW9pJ0H/O8YVOU4X2vuFjXQLxI\n8d8dPNcFrG6L6RKq1rPBNeyIjl+uauDeFElpgfx7N9+xInJyYm/PiHtXdEho\n1Fvda6Yf23ZUUsA/t/pZ5ag4GFUMaOOotlhkjTKrkQuyR9s2MLYRCruTRFts\nFoiIKUZIUSWfoCIdNg8RaPsvjT76N9rm/Nfvo2I8+cKo6LtIvFYzh047m29o\nWR65qacWom807yGznlOOjGmliB0QQvtzH7m0KQKuFlmmhx5gWNrodtvLz7Ii\naNVg\r\n=kD0T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFElgVHI7Si+PMOZam45bbBnS/D+8zuoXKbDqeYbEX6AAiEAkTsgSKlP0UC+9GP45SQP7WPXfp+YzHMY7G+PUl359C4="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.21.0_1572950467832_0.7874203463400353"},"_hasShrinkwrap":false},"0.21.1":{"name":"reskript","version":"0.21.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-decorators":"^7.7.0","@babel/plugin-proposal-do-expressions":"^7.6.0","@babel/plugin-proposal-export-default-from":"^7.5.2","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-numeric-separator":"^7.2.0","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-proposal-pipeline-operator":"^7.5.0","@babel/plugin-proposal-throw-expressions":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-syntax-import-meta":"^7.2.0","@babel/preset-env":"^7.7.1","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@babel/traverse":"^7.7.2","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.9.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.8.0","@typescript-eslint/parser":"^2.8.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.2","babel-eslint":"^11.0.0-beta.0","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.12.2","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.1","css-loader":"^3.2.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.6.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.0.4","eslint-plugin-react":"^7.16.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.1","file-loader":"^4.2.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.1","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-hot-loader":"^4.12.18","react-monaco-editor":"^0.32.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.2","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.2","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.23.1","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.0","style-resources-loader":"^1.3.2","stylelint":"^12.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.2","terser":"^4.4.0","tty-table":"^2.8.2","typescript":"^3.7.2","unused-files-webpack-plugin":"^3.4.0","url-loader":"^2.2.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.3","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/node":"^12.12.11","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.4","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.4.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"d0061e2ff53ed6a0851ef48c3d70dc929286d8b4","_id":"reskript@0.21.1","_nodeVersion":"12.12.0","_npmVersion":"6.12.1","dist":{"integrity":"sha512-277G5afDJ+Y0PkoG70u0vHB3Lrtevc9jvJ25zV18Jak0VJeDF0eGnch9eNaeGWqn5BQhJQ0k1M9vWaht4mKxPQ==","shasum":"8faf7b36e4a858584deb2568ce67a0f9c36634e4","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.21.1.tgz","fileCount":259,"unpackedSize":305465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1ReICRA9TVsSAnZWagAAktwQAJh687RL+EXljt0duRak\ncxgjs/Lzw8K1AomBPXmwtZT6HpOL8yOoL4uwuoIYcL27opT4jvs1u0dOlNea\nIrLuUVXMi5aEJKS8FS4NoVcywOtFTtblg9zdaYRL7YjFyiO07zOYwrLFad6c\nsm22Jh/cGwpMGExOFL5qVfdEtsYziRY1INgK/CQtwvmnvp7qK4+K5XteuBoU\nM0bAZgMnpjvIQg8VkJEi33FWuRv7+KSyqjQvNcuWV0LNe8IXj2f/0kx5p6lx\nylc5unHBm/WJ5v74SWjC1UcKh1YFi9ZNDRZdG4m7O1jcoYVqKQ3JuTImNMIm\neaySj7G9oUtzxUwilsjSvehyAYTZHrkmNVn2FeDlb2fJapkLfVYSvh55GRjA\n3LvoIjrtbE+chSPqN8MkTEWkcgruvrvymjW3HbpkPEUPqPer7Cw0irXvbYj6\nb+lwNyaA2LOTBPE31ONbJQg39gV1jHgpNJ5dUmwrUVAJwsKNbcBfs5pTPLsU\nGeqU3J3TzPKShIE7S6swdy5VAgYuL88UYYCjpdGVSsITt/DrvetyTCHbltat\nf5gy4Pl81r8zN5pF/l6ONz1zWeZQ6Hi6dvw+fZcvtnj+Brrxy05IZRlVJzNl\nFeed2mLgA/q9dQEvugagLNT2MpgCvG8Op0CtonW+JB3979HiHhgo9wMcnmXA\nSZOo\r\n=ECQb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCO+77I/Hb3U5OPHHIc/widXSiVMjXGgzPy3LahhstLiwIhAMZ+HP5OlPAp/QvLmKkzIxm+tmmMiPvSiYMEgtjbTG2s"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.21.1_1574246280028_0.5748157438249077"},"_hasShrinkwrap":false},"0.21.2":{"name":"reskript","version":"0.21.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.9.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.9.0","@typescript-eslint/parser":"^2.9.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.2","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.5","css-loader":"^3.2.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.1","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.0.5","eslint-plugin-react":"^7.16.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.1","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.6","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^2.1.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-hot-loader":"^4.12.18","react-monaco-editor":"^0.32.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.5","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.2","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.24.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.0","style-resources-loader":"^1.3.2","stylelint":"^12.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.2","terser":"^4.4.0","tty-table":"^2.8.3","typescript":"^3.7.2","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"1500dfd2441c2095da3147b4edaf6ae33c452a57","_id":"reskript@0.21.2","_nodeVersion":"13.1.0","_npmVersion":"6.12.1","dist":{"integrity":"sha512-uvF6dUc/YzBZWt+EMTGPAe6uz7hQ6OI+lstyOYgKt6nZv07/i+V3nfg3XGYVryc1nkjQ/ZrSL/h8ecGRCoJ7og==","shasum":"a8b3e93c8b0c6cc46884fa6325593556e7e20936","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.21.2.tgz","fileCount":259,"unpackedSize":305206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4Nn4CRA9TVsSAnZWagAACFwP+warWkJoVsDoP5HTXRus\n9XGfVgltlz623b60luOHRHqVP5rooP4CwM9XLm5+KXvxXxNPSFQ7Qe9Y3k0P\nsHAoy5cSp152UeHCBQRAywMVEy2oHQz9vBbwkKm+CSoanQa7oxpUIXsnJuzY\npzxqG01sybTYQrrFNkqDy57ph3zh///MUSF1MSBnBmoan+4gFed+p0E/jDwQ\nVQgeAf52u4eTZvOFEjOgHyKgLWPhu0QUvfHopv1OM1oiAKISSP94pj1r6G6N\n/iN5eQXoqGtJ4A/oUrjf+r4C1yzi3Ece3YSn6zhbvmCGI6Yjhey2DQFaGdNi\n4+ai/voAfzTFaIngPj0X8004iLucBsdgtXxaydhWH1ArypmR8WXCkdyKJjW6\n+2PgFTG/8uConpFF6eBOAIdUECXR5u3El5X42PyrIGaO5VVYB7L3AtEOSZ35\nNQZXW+Hk2YGFzRpWJb6FOj06wqN1jkzxHHaXCOtCmMMw5k61ovC8mDxEHukZ\nILVE0NHQZ9JMizvi4prpksHHg3H3DeDUzv1b5cCTHlP12B/S2CiF9CMbGGxC\nElSLmppMWmOg7jDVS77V2K2D6/THgASA/xQldQMCpnd913TEyMux17HT1fqL\n6ec2mcXySID/O86HWsIi6f0RGKzpxgT3whQtgfNm/4VIleNpJB3rjK7cH0x7\nAqnE\r\n=VI8f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAotw93h4hOrTP4oKGw0ikCD9nQ0g37YHLe8xCeqGSwMAiAXDYpY1ppdawd7g/VyD13ftNU/JlaYOTKwDVa540RXaQ=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.21.2_1575016951711_0.13683185357542738"},"_hasShrinkwrap":false},"0.22.0":{"name":"reskript","version":"0.22.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.10.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-hot-loader":"^4.12.18","react-monaco-editor":"^0.32.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","stylelint":"^12.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"039e5a8dc43339189d617247def883e7929bb64a","_id":"reskript@0.22.0","_nodeVersion":"13.1.0","_npmVersion":"6.12.1","dist":{"integrity":"sha512-sBg9xI/cKbHhxxCw+HX/5PjC1zvtXMh0EqFRGVF4KdawCucHEqhIVjMzB2NnrPdmdcRom0bl0thFTIjaXJS/Kg==","shasum":"9ebc8f66581cd45a77682baef16bd597db156958","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.22.0.tgz","fileCount":259,"unpackedSize":305292,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6MrOCRA9TVsSAnZWagAAsKQP/30br+vXlmbBY14OZjRG\nBgwVta55++Ub82vuMlXL3j1AH696WTn7ky0MvjrsZEb53HuChoe5br0uQTxr\nzsayX5nVMPCk1OmcJWXop79h4cLFVNCBUOJq414YxECfTOHbmQ3JQYQLuZGU\na360pm7qUqGZcWM7eBQtymoHI1FBHxlzB2RP2KKQ2lT1vEPa/vnNAGyqteHn\nqy6gaR1POXUk3So1FgnqnOXtvENMJcAXYHDmZRSCR23NjIxt9vg6RlGXi5mJ\nnyJrdcCe2kNgFHMpLXj8h0UmOXm0jCBFnNDZcRlIDtXWOLymDG2SfPbmRZiH\njRv3oLemsZYCoX3MTqX8CJGmSQM4YY2Sx1Ift8QOKt+CPTXw1JdJZaeyq4wi\nRiUxYjh46Aqx+2Gz3wEoOzM7U9Vd1TthNm6Ez2POfIENVetkRIlNHD/fOcoo\n5QYWDy8pqrOYzx52o2w6j/SUvpWQc4DDmxCBv8ZQCiBxi0uT21KmS214GVmD\nLxRB6sLEkO8fkxAUzy6fU+DiU37uQa6o4gwaMl1QTX80rz3GhsryQIv1byYT\n3WuCUt+i/8SnPBQD5ZsM8Kt0xu+hMCLnUdPVDXfdRFcFn8KqOv5GRJyieFi+\nxe56q9Un0eGF4Dg7ILwiOoeAO6RyIidDxhHhu6L0IhY71LDG4/tmBefx3hNg\nCajw\r\n=XDHk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNs79k+b32Ac4XWGQ8QoTf/ZsrBfuBwxGimb9yYxO8QgIgJ8OEUWk6CX5Ces+sAPmVGdMvlv8nTKq8jCZQ8OnBsY4="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.22.0_1575537357563_0.34735499491784316"},"_hasShrinkwrap":false},"0.23.0-alpha.1":{"name":"reskript","version":"0.23.0-alpha.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.10.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.0","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-hot-loader":"^4.12.18","react-monaco-editor":"^0.32.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","stylelint":"^12.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} sourceCompilePackages`：需要编译的第三方库。部分库虽然通过NPM安装，但它直接发布源码，需要使用和系统相同的方式进行`babel`等工具进行编译，在此处指定库名即可。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"1f9437a858d671508719ba9dcf20736e88a8db51","_id":"reskript@0.23.0-alpha.1","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-R+M2McJ3zsN80DWkNu9HO/rqdCIeRgtUwbmuoxfGwRUsS2qPr3kRxXlJpEi7FLCiC5Z8/FalXCiB/Qz3cHNTTw==","shasum":"4c5c07b5d5526e85d90fde731457171f6286fe4f","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.23.0-alpha.1.tgz","fileCount":261,"unpackedSize":306899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6fbgCRA9TVsSAnZWagAAAhIP/A6ujqfwmNHzHWZ0QsLc\nKg02eWSUM6UKAUbmcSIui211JeIIY0Zu2n3SMtKCwl0Fd9ftbYeWGoOpwV5e\ned06frosA7HCF4zZdINsY1TxXDliNyqJNgldyTMOWO3ANrJdv28x7oPzG5kc\nazyTiWuUtUb5eK0SzhuTvFeY0usARc9SpYn7IHVx3VYjPzF5F4o2+gE5U/Yo\n1Z6tmNuVOJtfvsGAPrFdxjmXuqM/lpibNvUon/GVI6GUIWQojEWHZWgy6gtc\nKY0n4ptTfSf+OqCi7TGadu6vP+WcX+WmsIg/hZjatlAsmp4p5ROGvFizMlki\nMb4/Ld27H+VxnLTxgK3ZcvMgdXRLkEwiqa/cCQHwxsyR55KOuglaInktfjRJ\ne6DnWGIawTNniw5cAvkYmouUVDgnaK9WsVussMhVEiXkhlUs/4SHl0FVu9Bd\nOn0snO7Oe3xw7QXWffkH6uRAIes8g/f/hVZO92dpNiXy3/7fx8ugVj04vSwU\nXRjFAf4coCrZu/nCzwMbrLznCJmHewuQvgeBelWIQ1AOhQicnma8gjsupOwd\nkoIothyXL3+E01qisAvK1dIocUKV90gi/NSQM322NmwEHjca9HGlJorboxvL\n52NQ5yAuMTiLU5UH1t+RW13/GBOTsGnwOitaF1fdWbV9/LYZ5e91UU2LcmjK\nrxh8\r\n=ghnJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRh7fugzZ7Tbjv30twbiWTV3uwlIwbmS3hsmQvrFLEAwIhAK1mSKtYX+kScWvz8I9Kg3VuhLWFJDNcjMZhHXYYGn97"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.23.0-alpha.1_1575614176250_0.021415236522317915"},"_hasShrinkwrap":false},"0.23.0-alpha.2":{"name":"reskript","version":"0.23.0-alpha.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.10.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.0","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.1","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-hot-loader":"^4.12.18","react-monaco-editor":"^0.32.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","stylelint":"^12.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"b8368a41b2526be7900d38483a451b968a62169e","_id":"reskript@0.23.0-alpha.2","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-k8tOzjhSzcEc9ZnaCRfnsspwFqNWLwzn4hssQhdSLENt8Nz7lmf2eGzGShw7Us+2VeTIGnc06y9VnLN/dHbfOw==","shasum":"6f1ec282258e0cbe3273f0a12488843213429e1e","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.23.0-alpha.2.tgz","fileCount":261,"unpackedSize":307002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6gpeCRA9TVsSAnZWagAAtTwQAInJ2l7SZaD0btDoL2zu\ndOoU5baYKPa3cZlsUV/OkVNl2evhEgMFO3EALwwrM2eyT2pGjGDMSBgQr1E1\nVcqYUCjV55kzb8Fk8Yk3mwX1Z4tp0XxpzCiUA6EwQiYWtEtPil6n1ePJtVJX\nVC9gfbGGDVqaN/FSXyG/ieSE5QnyFubsps9KmGTt/k1/WuF+aeA9pesWKSqE\ntE92x6ISCKPw6CiJmXovKAB5txRQpEiQii1klpGuNNzjzFC7+Q4Tsv146VU3\ny3an1+ryb9VeL6T/MHvrJpX6tMfnRwCMkKUHMJ+1LZBBSh4rCSe/jPA6Jy/F\n/YK+T81KJ0qMj2JVathgsuKJPV03+O47GDpgaZ1uXGPb6v949Ro1DDu5Y6gP\nYDgd1F0PNgdm465Ttfzkwr4Fdgy57SWNnLo8EnYNB5apaZZ+4Dfkz8Oufyuz\nPVwD0zlJeViLVr2vkwTuCVbsSN5b31zbkPkzn+SThCRJaVRgRWhJpdEi26ob\nMi4gMa0VODxLbMtU+muqtrFND2zdaq9C6+r7FtQXVfssFD3v78IRc9E9O1DW\nidHQvifxWpP+V4kWsjD9GzS+o2HNhYVQaG1DQaMYm7Zygjv4Sf4avtrQUmqZ\nGw8SO16AipjfBGCkfUA8+UDJTx6Suz1ts03uqPh5Y9dSD8sTwt1ToaSOfrZT\nXv/s\r\n=EqPw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCk5VOnCS4zq2fzdZVq9z1Zf/cgZsGz8ptY/6e0jWmiAwIhAPZSXJfQZ6skWxBeVpDIOb1y/wwFVIfIybNFL6Km9IN5"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.23.0-alpha.2_1575619166157_0.2915999702758225"},"_hasShrinkwrap":false},"0.23.0-alpha.3":{"name":"reskript","version":"0.23.0-alpha.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.10.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.0","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.2","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-hot-loader":"^4.12.18","react-monaco-editor":"^0.32.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","stylelint":"^12.0.0","stylelint-bare-webpack-plugin":"^1.1.3","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} sourceCompilePackages`：需要编译的第三方库。部分库虽然通过NPM安装，但它直接发布源码，需要使用和系统相同的方式进行`babel`等工具进行编译，在此处指定库名即可。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"83112cbb328fbb4fb9aec7ea94c9b6a35e0c067b","_id":"reskript@0.23.0-alpha.3","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-7FbmJKYiAdRdZ2NDzwr4aASpr14tr8lgE7xa0SgFjhB3mpoZqnce1+SGGh18pjwHEPYbegkAi4NObp/qsm9aNg==","shasum":"f15764c5f8bd9a40bc03eb491dd01585202b0245","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.23.0-alpha.3.tgz","fileCount":261,"unpackedSize":307003,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6g1pCRA9TVsSAnZWagAA1+UP/0vFdrF334gCJ4uuOqfB\nOdBfpW17et37GKVbgmLWB4acdz0FfvIh1ChuBbbF6vEeBT4b0daI9dGcJcij\nZoO6jbUChyl3Rzi3/vhmdecYsh5MU7lqEn110k8ELKX/8tV5B8DvvZRQSysg\nXiWvJpSI3MyX953Zw62C/Q0oL+GMRCdS0JjpCzZ+a5/KMIof73+ezPxy/WuK\n8apwg8ApLIv4oLc2U6IHMFuj/9zYx4ohcRSchMqCTMy/9f0gd0Kaxem85D7S\nezdYAdl1+i1gdpdXOeOTICeWU+fK1extPVJP0AX3u0NiZdBwW25PE7JyOR0z\nXLgEe9RAgV2HqWljWjxwiftA74ScvInZR1hElzeo6m4N1vvlYNSxDCTxTvlm\n29/91Gawc6sjLFj4XeCfl+ZkRQeVcy3ubHJhLyXLOPQzOSxM9J1RAJ4s5EDp\n8oCk7JU7a9AzqQW/Mqa29l6cGhWK3aFufwysGW9ysqYcblrN/f80RdLIN/oq\n6oYmA/94qIW4AAoCuDtvyoSmtfhljlaGExMGqVJ3dINqlv5X63h+qxkXv51y\nhFFkiaJWvDlr75gt/FgnyA9DhPhL+c5qaHl3rnXVY/85kcWqHQJI7QGm7YOC\nbR0988nFkLX1W/9F9kKkbykFdGU/y+XvrNMie8bT0hhlqsAN9Yrk0BiW2YAO\nSWdr\r\n=hNN0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJRZT6l1avnr8gV8Zy3osAn3zrVieMRbN/RKBkoBsaDAiEAxjjTAdWnWqfiTpNnVQm+OMMX18xdNUupWRcBk3BtN2s="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.23.0-alpha.3_1575619945531_0.8963506810842374"},"_hasShrinkwrap":false},"0.23.0-alpha.4":{"name":"reskript","version":"0.23.0-alpha.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.10.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.0","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.2","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-hot-loader":"^4.12.18","react-monaco-editor":"^0.32.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} sourceCompilePackages`：需要编译的第三方库。部分库虽然通过NPM安装，但它直接发布源码，需要使用和系统相同的方式进行`babel`等工具进行编译，在此处指定库名即可。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"80cf29381c3c26d84e5494d265182c3be024e6b7","_id":"reskript@0.23.0-alpha.4","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-JVXqsNKjHaSZGW7HkuL/2Lv4J6UNHPYhY+3AYcRxaR/XfRkvsgEqfRki+zHxVQO/0X0OzvL/SUan1kTADTZyYg==","shasum":"fb3e386037ce55e1d9d2fe2ab16766e82ad1e2af","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.23.0-alpha.4.tgz","fileCount":261,"unpackedSize":305419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6hPHCRA9TVsSAnZWagAA+0kP/joKpJw4ZoaElah2TcQt\nsRs/c+yV3pavnkxs9t97rlunSrK4R6sCISe4XDVD0raoAfnqUUt4nB6Xk6VB\noU29LjZ8hvGr9hurhKyHJ3L65tNBrFjK0DYpyJsDzlZuxF35lqH9VTjik0jo\nb6KD7FHVxbKLF+n1Mx3z2H3SOxlq5cAksNTkIoHfjTqjuzVtz/aKSRJwAXD8\n/Qz643gf4QGLulGA0IpF6JoIGbNifp3XhS4a3ppiYOUBH+3gmIFdeweipMvf\nDsslb/P8zWA80a5xl+9ovlVuaqfOo34iHhM0SmASewmipr1x3AmlOyKvPQug\n6dk2eB8F3I+qdbWF6ha3dgjuHMtmZXbFCJ3LraotYT/oW+woexT1rqdmR3yo\nbl93ifQ65QxZy6JOtJbeaZbGApNhjMxQcyQs+36m+063hrFIOKnnahCBw6zo\nqs0jRnYyM5Tv4MkWfJgwGXHYzKL8Pjj9IoxF3xLMGBOPV19t0uLlsGk0hUCN\nPBB/J5b5iTnbmgTJn2BjZYhXFuyeRRoIsqwPEAJq4ZPtLGbUn2hM94OqLW6A\nby6tj30n+D68DH9bmu0+3xwhaWHO/38wGsRuq/dOCzEyxDJF9GN8Ec0ItTvc\nNCeHWLlAGaaSi7zkASMgX3D1aspzMS1QiqsdQ+wmqzkv1L9cAatZKsk1oxCt\nvmU6\r\n=z6hF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDR4c9iHUROn4sCPOT7BxLp1Tlb7itVl1ABHaoW8UJJ9QIgJ09x0SwHJrrG3K1dMFFNbyLY++UtQm3ssv5wYR2HUkE="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.23.0-alpha.4_1575621574626_0.4057649930583731"},"_hasShrinkwrap":false},"0.23.0":{"name":"reskript","version":"0.23.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@sentry/node":"^5.10.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.0","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.2","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-hot-loader":"^4.12.18","react-monaco-editor":"^0.32.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"506d8e0fcfb9e0db072a536bfdbd6303f9069eeb","_id":"reskript@0.23.0","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-fu9XjOexLgsJNr1NR3YYzJqWaEYXZbcfyxyoRQIreXqjU2gNgAUFoCC2PDACz08wtQofrwai2tpJeHPT3uEHZQ==","shasum":"941557ba76e3247508eff643721a0e5a424ae374","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.23.0.tgz","fileCount":261,"unpackedSize":305633,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6hjLCRA9TVsSAnZWagAAMqMP/i4/xCDyQk3KQJBSKX1i\nPkyWSn7dm5ivwvYWOibB9Hi8fxcyh0Q8x0YMvP0bcOGAk+gRvDGb5Khdul+M\nihgMbMGLWsU1UFtaKDNu8ypG6l1JML7fXzAEeR0YZmu5UUsnfywyZT+74p64\nCCif0dfSVTfImEr3VPj1yIB8aDtfX/qpzJfQeNouS7gGlp14HyZR4V6yikpL\nUI1AQ/prx981WlUgzh8sD19vRE0A7SZf/GBfKAnY37jVH+GVeE9m/3mePuqp\nT+q/KmG/0PAb1+5fdRajrVjRKon5D+RlR3HEyD4HTqXV8kVW9om3noxEUeAI\npeRxE5ziCIcPRbXIHewUwjetJHigFurE0YQ5H9OPjthNTqWpNCP9V1NTqaOX\nt91y6uJEPxGbrzxApncWAROIj6F2AQhehYVspVdqkJ6KXwEzRkmJMtLfN/wN\nNmvAlDdlRuOubTwDRhQYYMRLarPbuiaFCOBOhhF3btTIlcJvj9sTFVBPfenX\neg5koTBjRlOmKpbK8ojViNq9k7U5SjaJfxB2UtBmo1FUCUYNp01bIuyGfqq6\nyxzH3CNNleJCWNcas3AoQL+O8a3+xnG5dBR48fd6AKnenzjlQ60PuU6xgRiO\ngHQhhJaTYncTinfUtHJU4cy3LrBKwpnYW6lqsKZa5mRSL6oWm6MJvaTrwNzq\nS8SI\r\n=/e0G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEde7/LrNOE2rPyYqFko3Bngzo6JXsY7vydy40xCZUI2AiEA7lCgtBVKdX+x+7/6iaoAya0vVPgyL49WbN9b+Bothx4="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.23.0_1575622859107_0.20770517781222475"},"_hasShrinkwrap":false},"0.24.0-alpha.1":{"name":"reskript","version":"0.24.0-alpha.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.0","@sentry/node":"^5.10.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.0","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.2","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.0","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} sourceCompilePackages`：需要编译的第三方库。部分库虽然通过NPM安装，但它直接发布源码，需要使用和系统相同的方式进行`babel`等工具进行编译，在此处指定库名即可。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"191b139b25b6b579828af6c538a2d6d189df8e82","_id":"reskript@0.24.0-alpha.1","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-89yL35D1HXFchXvn/qVfZ0DlPtldA66sNSnZyfo3DUxvw9RfR5Sti+3fqcD0eHh3gAwtU5ZvRyC7LYuG0aoPHg==","shasum":"0f944fd7c1aa791eadc1cc8d7c29b842ee732ab8","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.24.0-alpha.1.tgz","fileCount":255,"unpackedSize":293423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7dy7CRA9TVsSAnZWagAAwpUQAILuThUOXCHV/xu/0zrE\ndi2HcC8qbjAdKCjrQjTnZnmAgIVyRp8MKnW1CpEcUIl4IJMaWvLMNQeVBMgX\n2sbH4bZwt7sAc/YAo6pBvNM4jqJtuPgRxpfeTOPp8xqxK6U4xDFbSDJ9YGue\nwvuAm2Aen+pOcDMc+VO6e4Wz77NbLgxl+tNz8yK/JIhIAInRIocyn+5oQmPY\ndmfBo47ssRuZvvdSLPJPeOjQdm1OSuG5CXtksjRv1Ek85aIPnrVm1+x/ZG45\nCFyR5EbGXXy9VyV2QesH4mJMX0WzW/n0jwWpgNSHALaaH+3asE5+yAm8xqwY\nhWNVaceY9h3oaoMj9iMHYrPzcRfjn+RGjPoTqtWrw3E3ztoGPWdHG3Cj+nCA\niiidzVwEly8IHzbPoJD8JDPgxsgIhIgdL1x9aXS3AG39qnFkAZpgCfG6sJG1\n4ialkmjttU4YQV5wv7VPzK/uYZmFmmiBDYHs5Oaxuty4XctHOYrxb9LYxZh1\nFcl3KsG5AbumW0vy0jf3HE32ZnKQ4U2SZo5POyPzxjFOSMJLrnPe1jM/EtQT\nv4e4AgZA2T8VngFRB/OmR2s+i22KAhJmMb/ir0LUY7H+U3fGKnc8/nlol2YW\nD/fgwuHSGkC0jxDpG9KWx30UZP4u9LNDz0ktkbZhodmZ+/QWvAXZfF/cu/1j\nVjfO\r\n=LUcr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHk8dr4At3K9+dX1M48bgV9yki2/Vf/2QOt3UMgZhCnQIhAJAsbSYt+rYQUqLU84N71C4+LDmHbjnOZRqegEI/hGci"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.24.0-alpha.1_1575869627344_0.9740397692504941"},"_hasShrinkwrap":false},"0.24.0-alpha.2":{"name":"reskript","version":"0.24.0-alpha.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.0","@sentry/node":"^5.10.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.0","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.2","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.0","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} sourceCompilePackages`：需要编译的第三方库。部分库虽然通过NPM安装，但它直接发布源码，需要使用和系统相同的方式进行`babel`等工具进行编译，在此处指定库名即可。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"1282159bdd70930c792d036cf518fc32c78a454d","_id":"reskript@0.24.0-alpha.2","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-DXA5wyFqMXCbcxibRn4XqJHCRDuVYUTTJ9h+VjWEG3STiqL2yPDSFinaOlxSAq/VbKriQbd8Bgfsj19dd3MMFw==","shasum":"5f98ad8d7aaf7169b1bd0a8bc85b685ae009f171","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.24.0-alpha.2.tgz","fileCount":255,"unpackedSize":293424,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7wGNCRA9TVsSAnZWagAAHUMQAIzUkmLvJ9bRehmZBrYY\nzm3EEcDVlHejBhCcSW8UGdrxR4Jab8wYjbRD/N8wfc8019effsVst6IpE0pa\nhJ9veJQbBei1zNmcbCwBkpaZjKaoP2kvmzTbxQ0sToAHcWyhCRmhtuVHO0KR\nbyor+TOsEpKmRFHCARC1gQMKIE+JUtUTurS01ns/wr5WfNaB4UmVKmW5KOw5\n1P4xclHJPZYbPXbvPe/VoPVpCSXKvxhnJBiCplrpPWet8fpxrvrqM0MX7+AW\nbpTWQMMFFDHw7KVoyqgqI3EQlxvjetScoacIB9rwhp5L9c9Q1P4wbcLo+U2P\nZ2hZi/Uv8FCw0z4vbEN9nJlHOHojthn7hqdMoDaHm+GwPegRrO0By6vti849\nSsHoF2u0kC70TVKVcrJn5jZcIad4DlwKkcUBl7e7fPP60wjyRTdML+als3GZ\nWxxbg2cdy2MdKXh6t+VKq/rCRAFIcmqKqnJZQOLJ/LKBd8yCu3lsRDMiAt3S\nD6cu6yehsZiIDVS6TiScNyxYM/Qa57Cq0m7sKs6XgS3B+iuVm0R2Cz2o8UZv\nNpr+rVZ0xYhIa2r0tgpKJ3qHBTWn5FyojwiTOwHLrDwjwMgvgJqxlDVLYmko\nLOzAfLfcazthRGRbRrlBlh9yMiGiKoAqRxIeNCfEZ6zytQU5qAhHvRj9xN7m\nrn2O\r\n=Musb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXwUt+0CKiSrNdNAYSZxlx/2Z4kPHvLfyt20IvtWRGTgIgPHL6NCnrVIYTIGuUOgYM7iFeCvecrLpcLyDFvda6/tU="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.24.0-alpha.2_1575944588539_0.466005766980208"},"_hasShrinkwrap":false},"0.24.0-beta.1":{"name":"reskript","version":"0.24.0-beta.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.0","@sentry/node":"^5.10.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.0","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.2","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.0","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} sourceCompilePackages`：需要编译的第三方库。部分库虽然通过NPM安装，但它直接发布源码，需要使用和系统相同的方式进行`babel`等工具进行编译，在此处指定库名即可。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"83596e36c0cb49f74ccd2ba87a213123e36bd509","_id":"reskript@0.24.0-beta.1","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-JOwnRSjO1HvRqJ7R99dHHJO9iIlgc+4npFFN2hF2SVD20rAkLvrQEkyUKOyKOSc7jXf0HHWIIy1YIO/kONgNxw==","shasum":"ace2cec66cf183cebc8a5338f917ff3f53d5de49","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.24.0-beta.1.tgz","fileCount":255,"unpackedSize":293360,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd76NpCRA9TVsSAnZWagAAEYoP+gP2w3uEB8A1deFDb1KT\n1IWfFmRVUozhlpDegGEQdbnki7n9HZLtiCyYCJXOFQ6K6yf2Tbm7B+oSLe0D\nGFbkL2ARg1JkiCAr2KLTQx5M6jRxlZnAFPf/d8CNmUQVzKJ6fDwGIwoyTVKM\nWcST6gqreur6kWw479pH/suhdRag8ZrV2hafJzOtupV6oKg2chNRuAZiPVAP\nWTH5pymWXrlcrKNu7rrteYg/NMYb8Jtg7BEEJaMhsve2dFHGrqnVrvO3TvX0\n94tUBQkmPkiaI9oqkf/MFN/MTkCqc2pjCUIQAxPNQCKDRPb64WIouLPUf+OK\nFiFYFJJd6kpRT6kQDmgm8pZtLWTVGxyh0EfuvkA2K4Sj5S1srV4OPoHOCkjQ\n0o1gjEO4eibiQbtY6ZivI0pd/qH7/fDB6unDcPxatXy75WsMnzJxVMjQ8tqX\nVasdK/AXaBryN1fsg5ytSLjBZ6jMFz+7K5IR8To+eRbLq/8V+jrYBZ7kygJ6\nq6/R2HxRivtQr5TMYgM+fsgYveKWxUVNVYmiZ3M3ZfmorbzJTrpMeulVMEwq\ngxrcxFptK1szW0t06f5bO6euInm71m854x4F+IoMy5/KPgrwCEbc0sns7iYh\no0ZStq7GOqS/VTh6h51Jzsz2iaY5ppWs//LiWnQsVyEjnA0zCUNo+hXf+d/G\nRZks\r\n=cvbA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtbqwZaoCYIEsqv215DvyTYpOqIRi0/CssWYnqRsXIJAIgL51Bw4z0JTbuTG+XaZ0nC0qBv4a5sAsZ8nMj/UX+CT0="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.24.0-beta.1_1575986024913_0.32514344744929136"},"_hasShrinkwrap":false},"0.24.0":{"name":"reskript","version":"0.24.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.4","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.4","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.0","@sentry/node":"^5.10.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.10.0","@typescript-eslint/parser":"^2.10.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^3.1.3","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^2.0.1","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.0.5","core-js":"^3.4.7","css-loader":"^3.2.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^2.1.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.0","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.26.7","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.0","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","param-case":"^3.0.2","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.0","regenerator-runtime":"^0.13.3","rollup":"^1.27.8","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^6.3.0","sort-package-json":"^1.30.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.1","style-resources-loader":"^1.3.2","svgo":"^1.3.2","terser":"^4.4.2","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.3","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.14","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"00f3a7f68fa8721154d23fd54c5924685333e671","_id":"reskript@0.24.0","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-SK4SkbDEOZWsYqMvIb9uKjzOYzTAg6Y/B+OyUHR6TDq7WOvzaBvUmXtxGlULApIfwHMrg45VjA+XdIqgQLHT6Q==","shasum":"8d8d18c51b0e06ebca99662f1e2cfcb2c3e85536","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.24.0.tgz","fileCount":255,"unpackedSize":293353,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8Jz6CRA9TVsSAnZWagAAWckP/RbGGb8jW1MBuHUyjIl3\nEMVKDnDe3WBLdAZKEkFkcAYru3Z6O8wHxrn3gn6KTRRgBaSFw077JBtVvvx8\nF07WJP8pyVdsvaT7RJFQW+YnKhDjxw/lRRdlimIAr3nPlQz8w2RzQVmB/QW2\nPSK17wqtl8tEpzAefx9HNO7Twk0mTcl/wFT/UK10qL0UWqFL64p6nWkFBcSr\nrADSp9BSHh2RDJw36foyXI88PQ4+rgf7VSy9nu1MULaKTLuUbj9eU+WzH39P\nxsx1lDGEr0ZrTVgXNCdQ7/gXWAeg7w/Z+xrtzXKqQRVyV6pPSdsRWypnOj/b\nxgiIz3v16g3m3DQXhF7iRsfSkA7bDFgo5sEq0lW+vd1H1M0D3rzhrswFPkF+\npgLY3OYppZOSvZeNrsYY6kgkXuTngO8L53+52onUkVGW40ZgtztVwKUUec0o\nhvRb1IecjIuDbwU6nTtsXG7fF7rIGPl9MNBPgF2PX1+ibLM4Bpyp7gavsM0v\ndjy6OerTcbGN37bt9qQiOdMBG5JSp4DFUiaVGxUvHzXeQjDX1lANsL6jqhnQ\ntnEoBKW2sXtsOqgNuF34KXQu/s7h0QXwuj/nvFDL1//tl/xbqBbThiynry6z\n4wTkDqtF0pPC8xhaYN78usvbWGIsRl7NlJxnRmWQhoJt7U7O6o1dHbgAoa6p\nfUkL\r\n=wKWC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnLBaQrN0ECwGBA/0d6q7rz0bbwThMTiyyOekAo3ynUQIgeTelAOcwF2m0w4rTIwzYAu33qM7PE4sPegNo2FVfAis="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.24.0_1576049913790_0.8812669785277671"},"_hasShrinkwrap":false},"0.25.0-alpha.1":{"name":"reskript","version":"0.25.0-alpha.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.2","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.12.0","@typescript-eslint/parser":"^2.12.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","change-case":"^4.1.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.5.0","css-loader":"^3.4.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.1","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.28.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.2","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.31.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.2","style-resources-loader":"^1.3.2","svgo":"^1.3.2","terser":"^4.4.3","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.20","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} sourceCompilePackages`：需要编译的第三方库。部分库虽然通过NPM安装，但它直接发布源码，需要使用和系统相同的方式进行`babel`等工具进行编译，在此处指定库名即可。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"591685fd696be4506ff89fe85c68f0c62966fe67","_id":"reskript@0.25.0-alpha.1","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-e/zRIUAKt66MJqdCmtIMobghSytl0ABvGmW/y9Gyn6b5DoMVWsIeAkIHguM2XNINLVaC++ShgA7PvbU1+D9aYw==","shasum":"6bc2fa4bbe4331bcbf036f7a1179ee2e9a24f8d6","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.0-alpha.1.tgz","fileCount":269,"unpackedSize":314030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+ZyYCRA9TVsSAnZWagAA6fYQAIMENKuUuFnHX7pIyISX\n06yKAvVNzpviMVIjbhGiwmW7S0FudSDr35qdL14UwS0et0pDNOFcAOdqb51b\n8LIlJsJkeTAhRArjVZQawptORVAVdANWbUe5LLdpIWHFqwKqZoxKmZ9L/N5D\nVzUSLnkoWo6cSg7X3rVjYs5rxtgOoy0vnXFOMO+xXUEU/kDDtfsocXCzVdTb\ngrqEB0wkNTBFy89u60j9VZhMjXuJMCU+qcHv9ZfpuolcoxHVXzsLm1tHc54+\nsJNjixoyrDWWqBke3ycpQ+2UFoYtRNJjOynDtLfuEJS0Y3/U7Y/9mo+y2VNB\nG4Rvg0qjwGXibPKj9+JSZ67wGrDBLbsXnqYpYLnWX4zFCWKxcM9sLxqH7495\np1ZmCEsdHgxOvuREtGOOlLMdpe4RvvuF1icuZwWKoKiez3Ugg6QItTVz8h0I\np+Vn8/lbtM1dZS0xZAzqCkbX2YU4NCt2adu82eE3lUy8nk+zr/nyXoLHuGgs\nuroCQ7VEG5Vq9ac8JTqgL8WKPlZeMlmkhykzbO0yRxbMA94ekClItiUN9qrr\nZnMTiX04tPz9avBujDpERv/hgzhqAdlDgLm3GpaHMxopRXlC0ubAQPLeJqa1\nu/KXkSFqyD/QFnmqeWhoM/J92gn6Mo207ebMSIw6zMXldCoR/l6m7kJXwj/3\njS9Z\r\n=s02G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGbgQxOLx/wRVqemU3baDwg+4kP4kR2CBIlBkT+gLtNjAiEA6aMJXR3zbLSlXOcJNGTSIvnqHZWx8vj4PRJn62PRq7U="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.0-alpha.1_1576639639875_0.12114171427765541"},"_hasShrinkwrap":false},"0.25.0-alpha.2":{"name":"reskript","version":"0.25.0-alpha.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.2","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.12.0","@typescript-eslint/parser":"^2.12.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","change-case":"^4.1.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.5.0","css-loader":"^3.4.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.1","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.28.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.2","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.31.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.2","style-resources-loader":"^1.3.2","svgo":"^1.3.2","terser":"^4.4.3","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.20","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"72a9046ded787a7532b3775677a9b75f49bfddce","readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} sourceCompilePackages`：需要编译的第三方库。部分库虽然通过NPM安装，但它直接发布源码，需要使用和系统相同的方式进行`babel`等工具进行编译，在此处指定库名即可。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","_id":"reskript@0.25.0-alpha.2","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-YrW16OdOWWk2p8/z6NMGcYRMp/9X643yn6kJGUNUjmFMZW5GMmx5F7qyC7DDeQvM4IaJbRJqFckFHvGTs88CSg==","shasum":"19b09f573b1fab9ab1cf73b9edf6080eb84b0668","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.0-alpha.2.tgz","fileCount":269,"unpackedSize":311561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+zABCRA9TVsSAnZWagAAMPQQAIN+HzRDhoMhODsyfjwX\nhLtwVWYsS8M/zWXKNjcKl5njdiP3ZRfgcWkalOJFS5V6TjIR4PwDquG0NbGB\ndLSl5JjTnLIlzvLZ3cj2TDISnAQc58+O1xGVWbGYBc9eGdsgWhUQMLUAvFQK\nEFjUc06R7weRWvOWZyf5XFi+8dFkmC9fg0FBQ409TALq3q+CLGVgOyAQgATW\nWMJZlvDo5zarTadFPLEM0My4wBh4mkplraqSr3yckZ4D0B3mHKy5V1wFppLq\nbz4FrZXHDat+2BseuRxzFS23uYi+9mcimC9gMJ6n22oXDoAMT5gqWH7+oZeg\nyJhvNDnPvrIqI1DQ8l9O0z85kO12H7YERvO0ToDFM8pOXlw9J9Hf8QaRx0NB\n3eJjPS0ChATiJnjzXrfKI8GXT5UCJ9oLZmDLGJvgmfPSYbIM9f3UXy+ypOBt\nf5zfDkW1zEmVM2v/Ju8HWGgxs4FzUKXxR6D/gVM5gYuUw62Q0dldlv7ib64Y\nnJG0rCzHjkKpTTXLVaTOyAfPBV5Hlsmzeu/G1pLVIy/mK7m+diomjwx+2T0c\nipZpLgMdjv2XEhWkp6RxFeQJAU2drxIiO3SzUS3ZoVxtr2Y7PNhWU7TE/Em4\n0ooWHyAxygj2gfR6kOcCdwEmsc6xyjymXEFUtvOnneyucrSDFZAequJx7wjy\nq5Xd\r\n=EdCO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICSFGwTLPmqWo6ZV3Kyualw9K7fabvZ/xO81t2u3Q1KvAiEAoRNd5N+RNmFZWERA5nKSpNc+OXBImookVbOh74hLnG8="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.0-alpha.2_1576742912878_0.8718359355940488"},"_hasShrinkwrap":false},"0.25.0-alpha.3":{"name":"reskript","version":"0.25.0-alpha.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.5","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.4","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.6","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.4","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.2","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.12.0","@typescript-eslint/parser":"^2.12.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.1","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","change-case":"^4.1.0","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.5.0","css-loader":"^3.4.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.1","enzyme-to-json":"^3.4.3","eslint":"^6.7.2","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.1","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.28.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.8.2","monaco-editor-webpack-plugin":"^1.7.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.13","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.31.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.0.2","style-resources-loader":"^1.3.2","svgo":"^1.3.2","terser":"^4.4.3","tty-table":"^2.8.3","typescript":"^3.7.3","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.9.0","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.23","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.8.0","@types/node":"^12.12.20","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"bb6ac4b2c5580a58ba347eb3c86d173b323ba7c7","readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} sourceCompilePackages`：需要编译的第三方库。部分库虽然通过NPM安装，但它直接发布源码，需要使用和系统相同的方式进行`babel`等工具进行编译，在此处指定库名即可。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","_id":"reskript@0.25.0-alpha.3","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-ey/VihFiE4IFKN12JjpYRrJ4pJERDVKg3k1o90mZw/PPFAilUX6/MHHv0UofA8dAmLFITica4smqS84yFrhAfw==","shasum":"c74c91b2d876cf91562662bd6098386c07746b46","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.0-alpha.3.tgz","fileCount":269,"unpackedSize":314051,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeAdNfCRA9TVsSAnZWagAAby0P/0fClIABL5QaGnAUyYW1\nFisfU6Sfxn8Jn9owx0n1o48+QoTzxsizSMCm93JqMT7PwwP3L6rzeZyc8NPG\nZV9xyeU+NfurmQIUXOxrzvzXkEKuvr6waMERxNHZj7zM902TJFuMVbW05n4p\nmh7pgeWAU1qHcGVwbwY9MNNzdrOm+jsP/fc6tKM8Uxf3u/+bwAg/LrNtjZ8P\nVh71equIsZx+3RxKLqxLjS30MJ1R6yw1ngI/iy9oDaz4+ehfIziHO58N9Y6D\nlYsBkufW4iSNWQqdF2fEEN9W9tpbMPf4sYaoac1qLr5+bZEXwfFOgV8QMU+c\nNc8Z43f3tDFJ2sa6+/bj7JJIT9s1OCRS02y5RRhz83cU+Vi+K5R77B+hcmQ/\ngblCiEnF1dd43wa9kRBLlP/LfpCJ7JO6SpOLyEZcOiNoeRRCtGBxOVwZBznw\nP3/wmGgyxnv2X6XT0+A69tVUwTPKeDJNnt5XwpVuJ2Q1hUsjJAo5AqzxSo8h\nCqwbyDfSIUdMKLO9OitZyx+/1wxpo6PNDuehuQVpcZ0f4ImIDkHw86hfUDOt\nAIG1VttA2HBFMiCAk9U0OI84H86UmLXcdwCpxAMRewXLncAXJ80z4dnxzKzx\noJqWw7g8NOs8yKQGm8FosQLtG2Kgzag8HDgqEtQGaekkh4eZ+okF9qn/K8DL\nfyfp\r\n=7P1E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCk4MygGfKasHu98NdmWZxOdGXg1hZzJxa9Q22Cj6DNhQIgJeGyA73lSFgLTcs2FJueK173m1PckTnMlv7ySyqkkvU="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.0-alpha.3_1577177950756_0.6000454236425015"},"_hasShrinkwrap":false},"0.25.0-dev.1":{"name":"reskript","version":"0.25.0-dev.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.13.0","@typescript-eslint/parser":"^2.13.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.1","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.14","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.31.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-bare-webpack-plugin":"^2.0.0","svgo":"^1.3.2","terser":"^4.4.3","tty-table":"^2.8.3","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.1","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapLazy path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspsen`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"41d548c24dc872840c353f73531931c6d7ba55dc","_id":"reskript@0.25.0-dev.1","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-mgmgFMj6OGClDc8GBlWw+sMQ0j4Ejm+b0cFOBxDj2tPfWLmJTrha8KKN0inKYcQ0HHP4axd3c5+f0pimPSZb6g==","shasum":"0e6cfa7455dc60dae8154380cde73f0a65b24cd5","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.0-dev.1.tgz","fileCount":269,"unpackedSize":315632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeBbAECRA9TVsSAnZWagAAQ48P/2OD6hNyy+rx2i+JQQol\nvvZdq4HIhVyy/TjWJ2aElubp6MS/qBzFy4t+Ejxm+z8d+PxOnhEL5K3sH5fr\nPFkwhCPlN2mkHdM//to84j7kbc+f9DWijOTeqWmPRRpaXA/EGA+MDGqeyyDx\nLai5HdFci+wIUCOoqcbk1sZd2S9cBPgKkeSuM8QXB224XGAsSnGznqPdReS/\nhfHTnV5jVnIau/vLCtabsVjWmI4dyVIwGt+7onOmol2Fef7p3vrTHPOaT81A\nByXyAIhAFdVluWT6H84eZ3esd5WFYjOU2BlKC8Xt+B2d8tOoZ298/hDRKuN1\nZNA6WSwD1Ylp/rDUIHwAYif3ALEZ0/g/Q/jpJOU5q6qZKCz6TBDtc0Ns7KfG\nOKqEuRkJboMfHFTuIi2lmua+yU+Mq87fk+0lD5rOvj66sXs3o133o0uP8ihO\nE/BlTQxTZkZUBaqShCyX2I45DneolbrBc3IiQEhSp0pmthTi/nY8KeERHhCb\n113EyRJKaibGHJfCYznK02CBn6d5klVpBqv0pCzf2sqN7PoAGr+RnfzkcV/L\nMIRI1RTlA0Dqrd6iCGLq9JDBndg7ALS7eQO+WG23++5xQVHp3kRO5tHX9dXC\nq/U1Pu6WclP84IfdpJa26V9lS03Zd5jCPXnK68hcCCHfP8Eu5IwffuP3Xsxi\nJH9L\r\n=B4b7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4lNvwPea6ACaQn4o6zGaWD9YrWOft0O9j6hL0laI6eQIgUIrvTOvsGfKomsxVxdJeETvOtOzT/1Cz5WQu067DLFo="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.0-dev.1_1577431043756_0.8413389266278015"},"_hasShrinkwrap":false},"0.25.0-dev.2":{"name":"reskript","version":"0.25.0-dev.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.13.0","@typescript-eslint/parser":"^2.13.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.1","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.14","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.31.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-webpack-plugin":"^1.1.2","svgo":"^1.3.2","terser":"^4.4.3","tty-table":"^2.8.3","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.1","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapLazy path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspsen`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"41d548c24dc872840c353f73531931c6d7ba55dc","_id":"reskript@0.25.0-dev.2","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-RxIm6UkcVLpsgOthrzgaYXn/Ss6EF7wXTFTiT8H3bgkG3jU5DNksz6GRsD1QhIG5ed6nrRn7wJzQ8/7MwaSJMA==","shasum":"cccd72587572cf78bbceca0f577d2db481afa612","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.0-dev.2.tgz","fileCount":269,"unpackedSize":315559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeBbUKCRA9TVsSAnZWagAAMzAP/14nlnRFieNpYEvmEOth\nBTRZn76hYdmk/kEBOk18YrTqEHvB6j/dkFTQXxY2pkyU+EqT1IHW5qMev00V\nC03tKW/sf7J6wSURalCTfQ6iZYJj09ProkMlxCwqWzoIUhFh/cr72mAkAmpl\n3oUaadOi+TLoi7+kSPAbMtJNLukzFTkdVFiyyGmKZqU/jep7DCsDPA/WAMVU\nZCoQRhGaUwfS3bvg8u6JsMxD/OmQu/fAQyd9aHYlXxW2KBF1ULkJhXoNunR3\nMtzVjFDcDKi02+PavMf52hnk/iqduF0LaDVHiV/Y9DkK4Okzb9Ih4FgaOs7x\noaAFVHYLGe14CYvcVYz8dApJonGynkoGjWkkghkJfoaG7Tl6uYB5+bNc8yVW\nL+KYiKRUmpsvztsTEVZy5//cku7NSqCvE5rHyB36kUot2q4nPzR+ifYn5lgV\nRQk56byQUZ7HqU2U2rfsPl06WJx6BzoVMRAS3ipfWbJv8jUm/o5lXdVvP8Ld\nNjOUNdop08iDPcmvwCMFkVkwKZLXrXTxe407eLU6IAUI66TxrKq3Zwa8SwaU\nUPfgdVmunR8jHlxjU8qryT3PhT5vW4KSbZqCgQPPu0S/Fr2H015VNSOEQkar\nG4J+Kv7T3Hv+FbL404guToa5n8ZnaaAhvKdOneK7YhRIDQyP1CxVrZQ89YIx\nUyz/\r\n=eGvc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHz0zPSrwwh5vVMIuay74I3cvVX1rsrPwmP72rxJNgbgIgUbc51xhvt7dCTGck4cPqJPEBIcT1CQy4/feDkqVJ1sc="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.0-dev.2_1577432330170_0.01603954441043598"},"_hasShrinkwrap":false},"0.25.0-dev.3":{"name":"reskript","version":"0.25.0-dev.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.13.0","@typescript-eslint/parser":"^2.13.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.1","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.14","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.31.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-webpack-plugin":"^1.1.2","svgo":"^1.3.2","terser":"^4.4.3","tty-table":"^2.8.3","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.1","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapLazy path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspsen`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"4d29b95d8a0037214cf25fd76868735d64845f3d","_id":"reskript@0.25.0-dev.3","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-zf0pSAn56qAq5wDqRckyNFRV5TwEX4ijLWjNSmqmr88zZ/Sj2qqXNCvWPQl07YNxnEmoTjHO/QO8AxZ6h+lqsw==","shasum":"4945c99390a3318f56991dbafa7e3a2298c04aba","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.0-dev.3.tgz","fileCount":269,"unpackedSize":315560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCrHyCRA9TVsSAnZWagAAljUQAI17yCcqYI56Mp5Ik8Tw\n5CmSJt8B8P51/snKQm7wNkkCfbuptWbiJ03K4YX1tRUYiq36958Od6IE/h2D\nS6ZKtTVB1IDtkMXk3eGOryZv5T2o0sDasyQEOBx13LY++jgy7eQkxPOAG8Q4\ndwo0ZdJr0MA0lMRcSoY5PS9CIBVJLpTGyhEQljiKYqDF5djP8d0HCHgAoTqY\nfKNRrzXRUOd43sBGAkYlFdvRfm8oHqXR7B+Qi2kJIov/W7IzcZhFpEp602A5\nos6FcZ+80MD0hBY6J8rdSmddRi4NbLG+SsmRDe9vTPKnkcOWlmQjikRlju8r\nnuYhLli8sGpaYwaCcj8VSEIENx7ENofbFrPjiog41WvdjeL0teReCI4tlxAM\nC1KEq0DC4I7TSXjg+DCvDajHa5BnzkiC9GkMQvf7AvVpgT2Lxqv9zhPC68UB\nqzan/7HFz5PrQvMNQpG6YX8ximfuGyAwJqEul1ryITDfSb4fEBrdElZUQUoH\nzNDVJnSUkPO+4aWbLbJiBYADrDeB+5g+hNyq1uRyldKt415L0129epgoHhsZ\nWHNkuS4NUaYrLE+17TTL8iwx9F1E3XMOB5HidUlMZeOsOjcWYvgf3fJffR+s\npHgD23GO4a5h/cHtS5zvSz5O04lD2RFQ72ozIk+cYk6JV+DPjy3jIAudlS1H\nGQ0G\r\n=gvPC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+KABPR8pmM0gmQv6NC83RJcPJTihmI7D0QVYoh4hi9AIhAJJb+YPYBL2YkFFlcdfZ8/h1q+sbEetpat5stiORJ5Gr"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.0-dev.3_1577759218150_0.5716570698259529"},"_hasShrinkwrap":false},"0.25.0-dev.4":{"name":"reskript","version":"0.25.0-dev.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.13.0","@typescript-eslint/parser":"^2.13.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.1","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.14","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.31.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","speed-measure-webpack-plugin":"^1.3.1","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-webpack-plugin":"^1.1.2","svgo":"^1.3.2","terser":"^4.4.3","tty-table":"^2.8.3","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.1","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapLazy path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspsen`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"4d29b95d8a0037214cf25fd76868735d64845f3d","_id":"reskript@0.25.0-dev.4","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-SFv4EPoYx3frCQ3j6alsTXnipdrApvDVKLc0cNghSa7ieBYazOVF19Gfpx2u8mYjNpmZS2AroCSm6SVtC0fmyw==","shasum":"86a5d6361f78ac1c2fbdd09a1f6cc07000dc8195","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.0-dev.4.tgz","fileCount":269,"unpackedSize":316176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCrfQCRA9TVsSAnZWagAAr/wP/2HP0xVVD4pTn+Ir8YlE\niLN4eFg2KZPjmK8BhW18P2BvYKIgWl/w/EdWX2cif0v4+m/EXE1YB7zMeT7s\ny3/NluJjhzW2H268fxOqD/2/hoR3tisUmc9cvYFGHVfC5mIN4ASvVRIasWwz\nDYh8GxIrq2yj5v0b+IFJX6Nj/pRqU10PltXecwzpNxo2Wpr/nFL3n6t6s8eJ\nyX1riqpgZzNe2sReBPPIlYw4cAsnjYXjgUZYgf4AUWU7j2YbyK6f6pNsNP5J\nn+aJZk4mzKPX5QnFxZuR2oFPSX0r2zPTWU4bnN53b95QyQqr1jKe3bx4uEi4\nKMfUdG/KqyraOuv4OMKAtW2iIA9POOtfq9z5KHc0Q/9noRVd1i1V7NjTywHD\nxjQgkoo9mLXs11TvHdy4TYT1p8Vmoc+CJQza31zmLP2BfdTrU6XGaWx7XSbg\nuonqOjMxNGwm078YS+Bg8H5KaFkNyF6OIILjqmDYELVs4IVweBKwCCl7y86F\n/GU3jz5IP7hPopysbHgvics8XCaBdXM+458naBjaWYyQvvTrBPdDfUdXnX6g\nOctdIJxRXlDxOCnxCcOLW3aouFamYbrRYHHM4HZq+ApV2e3O9UUMgXaJdE65\nq42Om4UD+DtoKxgx9PX7oT+G2OEkgrcry1hE7KGGuEnYgV3Qjf8xszlPL422\nfhql\r\n=Jzin\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFYWQSESsV4xMRqCY1KAqOYBqD1D3/InqEJmP5cYkhfqAiEAjRl/Jy1Berkxnmx1HuQ3bvU4L5c/7+v12GOeTEUYGTw="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.0-dev.4_1577760720383_0.5145677934298616"},"_hasShrinkwrap":false},"0.26.0-dev.1":{"name":"reskript","version":"0.26.0-dev.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.14.0","@typescript-eslint/parser":"^2.14.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.3.0","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.2","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.2","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.28.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.5.0","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.36.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-webpack-plugin":"^1.1.2","svgo":"^1.3.2","terser":"^4.5.1","tty-table":"^2.8.4","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.4","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapLazy path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspsen`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"b2009611fe45fdd9644e4e100c10ac6b55116e63","_id":"reskript@0.26.0-dev.1","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-Pm1YaL1MoToy44hVFYRfxu5QxKZo7bssRK74GwKxlgJK6z6QRPGbMPSeUe9LFUtUMkG/XbD7pNtPifczWF168w==","shasum":"3cc3cf51de6a7dea364851966e9c7711f42be0a1","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-dev.1.tgz","fileCount":269,"unpackedSize":315007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeEwFbCRA9TVsSAnZWagAA9VIP/11iMBdC+OLwawhx519v\njiPqz7gKzb39+4TKys8N3vUVVqQnMjbqmcQqVBgQtvpx5dKE6AO9wiMfrFLl\nMtQGIk7UylAFKW1Q3D0aFOLgTjayFa7a6ayCnf6CB79Hmm35VfI8Sbi9Fr+I\nPcWmcZyKe7dU3AQafE8oTKWM3jQCmPEfT09BefI9PswgBvIKddZ5nEtCvrsx\nqSeHy/KQr7E2yddLz3j1CWcXyTMOLOKYtDnrmDtPG+exMKw4pOLZ8W3gzOT3\nLBPJMP4Yp2WG6HzLumbnkdlVGp+M9oODs9m/YDyLTG8qt92oW99btR4EGGEv\ngr5AYmD8gBysk/BJi5H/gjDKHvIq6TJgdvGB3eRivJo/ON8WzUbfL4w0mQ8Q\nDF0+nH4puqUX5YC/+/Cns1vwKfip59NLdeb2noerOIlxcBRSOsHt3mqQkDwi\n28Z9LxbEzug0gguyh8+I0uY0+vJVB1Opw8GJFT8R+5aeCImeq24y4lf/GYa3\nvbBqaIrJXutaGQv/cXntqeiSIZr4bxqYSBQmkl5RF6TqS91K6dZ8j3t3YyZI\n9T8i8i6uv5ljc/Z8JaFI0zYS5OUUObmb5vMM1eehngnDKBy1Uz+o+/pQ15md\nXEW1vqSuX5Rrsc3748b6ozWqMZEemkqEpEDKFyYnKwkTTze1VHyEG+p7h3LI\nFQ+5\r\n=0Hzy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUldNfrM/At1wggcj4xW49TJkAk0OlENzBWG5j04fvRwIhAICvJbpvkFZhWZ1o85aS5jOe11t1LjzdQGX0Ib/3fZ34"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-dev.1_1578303835119_0.3757840982372014"},"_hasShrinkwrap":false},"0.26.0-dev.2":{"name":"reskript","version":"0.26.0-dev.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.14.0","@typescript-eslint/parser":"^2.14.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.3.0","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.2","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.2","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.28.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.5.0","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.36.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-webpack-plugin":"^1.1.2","svgo":"^1.3.2","terser":"^4.5.1","tty-table":"^2.8.4","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.4","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapLazy path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspsen`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"b2009611fe45fdd9644e4e100c10ac6b55116e63","_id":"reskript@0.26.0-dev.2","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-QlBqdpUlu+4y6eMXx8UUpGjZxixhkKQxZmoKxWJEsGd2MHrRNgzRdgQTWCji2sEI96uDEIk3j6LmqqEmeA2NCQ==","shasum":"4c3119c7196d6f1bbddfc5c2e53a97178a32c867","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-dev.2.tgz","fileCount":269,"unpackedSize":315023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeEwKoCRA9TVsSAnZWagAAgz8QAJw5v1Z4SydrxpNS4he2\ngA0Oq7V7MIEPvgzb7AH61clV5xY1lJPNu3WJFRmFibAA5k9BHWE5N2SkENzx\nBdqcHCyyD7RAGIq1ejE3zn9ojEJrjyoty2sYxI97F6gu/cGTSBbP71aWRv7M\nsA/UMtgGFDrU0EN0vmNXlq7hBMuHZZXw2kK7ikCKAUIf1RGMyN8nLBW8zvv5\n1m84WQ+dDPuq/D8uzocZtt3dYK3uOE5V/yINUwP+u4DgyD0OtIBq0Lszx2uy\nZwbExF9xvI/6xLZxlGJ5PID5K2bOndQycqRaU/5ZXsAd374AooPj+Bc0jgU3\ns6XMv3Yp8owA0raiuWK0KqdyfGT7pXGHYiH2wtYTsAJLAkdaiP3AM0K1yT1W\n5Y8S/WKHHvpIXFjudYvYaRBgOJcEJNSf/yC7Oek/k/CZB3mP01ilUhbUZ8Tw\n/YVeZUM7UJ6Pey00NG6lPCd8PpcRK+sj417DPrZoliXyYhjHgTzsJIhk6qLJ\nyVLKFSGZIJ2o3MVFkkUF9nrJ3eNd3JBMCzu3I89+3X782jkEd/gfz4X5iznJ\nxaEb+fW48pOLOBDBK9vm5+DoCalrYqPnSkgPgfN2pRG+K6atUiZKz+cOVpHH\nlANymtGWAt1pjxJfjduFYSeYLh1nyeq4TqzaTCmifiKFt2vd8dLUBzmwfDZU\nq80T\r\n=eGMa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ54a6fU8PLYGe4X1oTEQK+oM2KHrLFYCXpNK1XXwitwIgNBnz6AU5B0Lxv0YWW9DNnim2ilCo+uLYqoGwDYoCF2o="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-dev.2_1578304167609_0.9489079942484568"},"_hasShrinkwrap":false},"0.26.0-dev.3":{"name":"reskript","version":"0.26.0-dev.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.14.0","@typescript-eslint/parser":"^2.14.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.3.0","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.2","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.2","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.28.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.5.0","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.36.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-webpack-plugin":"^1.1.2","svgo":"^1.3.2","terser":"^4.5.1","tty-table":"^2.8.4","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.4","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapLazy path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspsen`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"b2009611fe45fdd9644e4e100c10ac6b55116e63","_id":"reskript@0.26.0-dev.3","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-+j1v4QKxpmIugowlMUXnJQc/MXE4lG7meVwAMygZjj50uINhZNckW7TlzOQ+7brf2z07KZ+mZ9+LqgjV/qQ3rQ==","shasum":"631685ae87016cc9c241e068bef368a05934c7c5","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-dev.3.tgz","fileCount":269,"unpackedSize":316384,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeEwmtCRA9TVsSAnZWagAAULAQAJxVrQGhXVFi1GACWjvC\nRqFyuQURvj7NGp2WXzis1xsXqWUp3lNMQQ2ffnNVvDUqCPntN9Wm1yZU1JQA\n4VNTvtyQqRlByhZYBLkZ1L46Sd0aYMA0m2KZCKlqtPObI33qYXX+uS2xhoJ2\n3xi8hJ+6g28BYLvTQ/AqAMiIFmCO4tGkOfqTFa4M56tiCqCHUl/xXJxykF4E\nzDAS/ReyExJps7e8RdhM4qB1r8h3g6ey8HlhxzNEI4R+J52y0TCBtYxgbMiR\n8GeK+pIMwh7X4zCMbJpqs5wVbfjbfmwXetF/yYIs5hNCvrSV/BDbzmkBmoXL\nrB/qMlDewyio+pa2aBMG18LN3QBYW6eSZ7D3u6/HuGYh5qfrV58YawVTTsDx\nqh2huvVyM+hOzCMgqvoft/hYFuA5kliy6ig3OSYdGJV7ImXjigl/Fl428yNW\n6MZT/GrUcLcEdf11YkL41PFWgD4GQhqOszMD2CdJL7cpLf0C34g+flAF9crg\nyI/tpwZBpouDEn9dRSJ5tCBehiwAz/OjlUsV6BUcVkkvWdVxyyEX1eMEwIPZ\nTS8rjIqTBcK8JXv8+DboznVyI4eJRDGJ8N/Ek0lKWHww5TkLS64AGoDvhFeG\n1GO3bTZWbhQwZYTCXWCxKSWwM2tu2vt4cpjPdjTmMc1xNct+Q6AlgZ4HzrcY\n9N2v\r\n=0dYZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/dCmGlI10FZnpFb1WBIlXdy8DvgritPrJgNyxLNQvPAIgMzp8pUFZD6lPtH29j9NHG94sraVHR5kTDVsqz2oNIM0="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-dev.3_1578305964664_0.2850622033622512"},"_hasShrinkwrap":false},"0.26.0-dev.4":{"name":"reskript","version":"0.26.0-dev.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.14.0","@typescript-eslint/parser":"^2.14.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.3.0","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.2","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.2","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","node-notifier":"^6.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.28.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.5.0","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.36.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-webpack-plugin":"^1.1.2","svgo":"^1.3.2","terser":"^4.5.1","tty-table":"^2.8.4","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.4","@types/node-notifier":"^5.4.0","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapLazy path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspsen`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"63f8cea249c87209ac50a5b3bf13e8fb02eecf79","_id":"reskript@0.26.0-dev.4","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-/cNRKgQhTftOhYnoD3DXkvuolem9KeaImjfg9m4dbyXCQ8N1KJ/cmVSKXLt75gK5oMUqQyDlt3oDaxeT0/Nftw==","shasum":"9eb7e0f124ccdbeb52084867dc090bacf3d20092","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-dev.4.tgz","fileCount":272,"unpackedSize":393498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeGE06CRA9TVsSAnZWagAAzlcP/05+PlDfl56FwCiiK39f\nnKYeLFD/LFAK/LWVMU4p7pB03Tts1MOUmRIwcLHRLbxqxZqhkRVynthD76sv\nriuuFGfL529btU/IpakJTbe68TRwQoFtAcq8NNtnrAIuToA827fXX8cA8EGb\nDJN1Utwfj4GoZHN5da13OGcRulfpzX6E3of3kxgYnf7+t+h243+Ymhsk+edb\nrwKfLrfOmHrkO4mlF1wOz6x9jmMLE4i0aTp/F+SBv3mgB1bOgXeDZ1MR8Bex\nIFn6pIM5lMJLsV2O2lfP4G72DGoTPjs9ylY1lCuj1rRoI7krggFnrarhyGMo\nAhYZ6yto5gPfO3s84FWV8adZK1bxL6W0Ej2Jjlevo/wU3XECOZvKDeFKuA6o\nmC+Fq/cuOz5ojB5SB1oR9+6LfIfmpkfhOokDA24+JTrtl8H4SU7PvAI327XP\njXwLVmdfemvkv05Q5KgpV0nFkuRPdTFO54+kPdFiIQQVzr7Fn9+EXZN4fQVU\n4RGGdBI95jDWmZrxlrmXn3ObfCE2xujvcrFanT3W8RJWP3ighjubrwE9WZtb\nyS3CKfOat40ogcD8YgkelXz4KgyfbR6p+JzYT0UEkBjrMocNyXKXybWu/2Bd\nj+/2gEGdZCd+ZEebxf/3apgpgh7xfBHkNKKKNW7/TQ2gWfIrljbCMh8gio/i\nPI6I\r\n=yZDJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMWxufb24oyN69PPyfwrPmBAoh4rJuxoBoC35QJhdHbgIhAMOna1n+8fQTsCDJpQ40+Ilxq8cLuqs4UH0qgY3L3hjR"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-dev.4_1578650938245_0.2999839073416246"},"_hasShrinkwrap":false},"0.26.0-dev.5":{"name":"reskript","version":"0.26.0-dev.5","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.14.0","@typescript-eslint/parser":"^2.14.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.1","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.3.0","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.2","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.2","internal-ip":"^5.0.0","is-dark-mode":"^1.1.2","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","node-notifier":"^6.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.28.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.5.0","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.36.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-webpack-plugin":"^1.1.2","svgo":"^1.3.2","terser":"^4.5.1","tty-table":"^2.8.4","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.4","@types/node-notifier":"^5.4.0","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.1","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapLazy path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspsen`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持ExtractCSS：等webpack原生支持CSS之后实现。\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n- 支持发布至CDN：鬼知道我们的CDN在哪里。\n","readmeFilename":"README.md","gitHead":"63f8cea249c87209ac50a5b3bf13e8fb02eecf79","_id":"reskript@0.26.0-dev.5","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-AekRFd12yL1+6+7BO1t+P97mbclxnZ+6gbCS6lEuFiV14PDP7MZJ79y4Y4R9yVKZxh+DREhvzm58BzCJuhcukQ==","shasum":"131e180aac4d41b914afa19f31c7e47351a74312","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-dev.5.tgz","fileCount":273,"unpackedSize":391083,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeGYVjCRA9TVsSAnZWagAA1McP/3y6jBMecloqlhyI3I00\nWMSJa39QYZaF1lzZFFg/+Lr+ZsSqHp2zW+/rWOHcIL30dJz+hmZX8lEr5w+d\ni8BElj5DKG3fNzIW7ZolbY7q2f40lqt37WTI5BPou4phwQsOx4coI7N7p1CC\nhxs4UX3roeqrAOxUawe3l9ZndBrBouHgB18HAIBgRFKSEqVARfU2QKKvEhCt\nddzzslIbtANcm1Rm2M0xfIk4SKDMobS2X4ro8L4PgzXDRBJnwYVsJyalv2R3\nKwt9+yPg9A8xIn+fi30aoNrh70ntlPQo6iQMKpTaTudyK74DLyu6ake0y6uP\nSFNpGTNglwkz1T9x+mE20DWjiuSwFaRsD+ThmGUef5gSRdNmLO0lRJU8Hi5h\nTMZ5mmrKvdRaZc3EbFPok8cHv3HpuPyPn98INU+oQfKEVYmSrM9CEMq8Eyux\nHT5+qRkIBO991OZVUluL7G4XtSUktgwZW18PJ3V6krGxEWSXNiu5kOAEi0dn\nv17AZi8e7y5kPZSiQ5fGjrGQuOEBL+vs7wdgxpCcZc3+kBt0Rmc44vgo/650\n0mTaG0gu8DrmK8Iv24taPRUU4JC0GIg88XbuIYNn1XFaR8DAo2TUJ40A4Y3E\nFM0GBEX6cuurR+cYXpRAxNJzFjSMmSY2w4HRRaaDhZDuqRoN4qWZsj6P6Sgg\nVj6j\r\n=1+Ww\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAfopzYE73/KEA6DpU6b/55iocwxQ4sc/RJMi7TDfnHRAiBviY4T6peK30LBvVR0L7objar613wXsOosf3f6tnvDcA=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-dev.5_1578730850784_0.12269557857415991"},"_hasShrinkwrap":false},"0.25.0":{"name":"reskript","version":"0.25.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.7.7","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-proposal-decorators":"^7.7.4","@babel/plugin-proposal-do-expressions":"^7.7.4","@babel/plugin-proposal-export-default-from":"^7.7.4","@babel/plugin-proposal-export-namespace-from":"^7.7.4","@babel/plugin-proposal-nullish-coalescing-operator":"^7.7.4","@babel/plugin-proposal-numeric-separator":"^7.7.4","@babel/plugin-proposal-optional-chaining":"^7.7.5","@babel/plugin-proposal-pipeline-operator":"^7.7.7","@babel/plugin-proposal-throw-expressions":"^7.7.4","@babel/plugin-syntax-dynamic-import":"^7.7.4","@babel/plugin-syntax-import-meta":"^7.7.4","@babel/preset-env":"^7.7.7","@babel/preset-react":"^7.7.4","@babel/preset-typescript":"^7.7.7","@babel/traverse":"^7.7.4","@babel/types":"^7.7.4","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.10.2","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.13.0","@typescript-eslint/parser":"^2.13.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.0.1","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.0.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.1","css-loader":"^3.4.0","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.1.1","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^10.0.1","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.1","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.32.0","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.1","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.32.1","react-refresh":"^0.7.1","regenerator-runtime":"^0.13.3","rollup":"^1.27.14","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-terser":"^5.1.3","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.31.0","source-map":"^0.7.3","source-map-loader":"^0.2.4","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^12.0.1","stylelint-webpack-plugin":"^1.1.2","svgo":"^1.3.2","terser":"^4.4.3","tty-table":"^2.8.3","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.0.2"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.7.4","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.1","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.0","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^3.1.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"52b1bf40454ec963af4b3f1338d0b1380013297f","_id":"reskript@0.25.0","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-71r7Jsw/cduRkYEIh41aAufbZ8c8CHBj3jMZvuYlS26MwnLaIL1SxHap6hHKax60yDUIbTgFG3WMoneuS133wg==","shasum":"54497386021d91e9a91b90aa3695d1f46d6d78f7","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.0.tgz","fileCount":269,"unpackedSize":316037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeHVGaCRA9TVsSAnZWagAAqpoQAIHwF2mB5GU2snSeXQ8c\nUbpTITvfLKbRGicu3+tUQWyOL5YY06SHrqAzluFTLRwzjpez8fBI+j9CFyM6\nP2q2LdCgmwitfO6Q3aGUJZJ/QV5VrhWnmRY6M4+elUUyuXgRUc3qEEfakttP\n7GzdDbnboBh0ZUp0XK4zXtLy+w1Ue1+E6Da+Mb2MpTqm6gBXuWAFcPnD9B8s\n16yFfChd3ZKBg0M6cUfSLaKETCxirRANgnRswGjV2BjbXTrQUqYWozm9aYOf\nZyFCa5Gpm3Ln5v58fSgADFIxBFU0ky8jnEHaZC/YDqbqYMrSzCYfdSqwnQ+2\n8llU0CH6hwL9rCrrl46OkYeDedMKZnR2pn8pD3bwU6zw10V7rXX658f1n3VJ\n8J489O2jRLepiFZpSEl9N2GzLemI+Mo1zRgYR8yf4jAUtxwZa6/10996J+KW\nCKxF1IZpwg4ssCn+tnjacgQCDKvMolea+KWzJe+e6rdptPwNOVfMKZR9/kNy\nSCRk3VhhPiuvD6hlpk1pgPp1xy7bQTeaUVCcXVQRXHiyVE/2+N7ItHMgUH+k\nZTzLI0+eb2Ub8xHeJJoQ7FsFL6weXBl7V8ZpGudUEYtQl1N98NSJ6bbozp2k\nYa7VWDip/E2NBaoPxPjDKyJt4c9i+hdrR4SvXY67CNMsn0uUzV/zmXLiC2gn\nVecn\r\n=aYo1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFbOkDd4menHHM6FDwq/y9aab3Y8lkf2dyFe1E+ABUGHAiEAk/fuZPt+bRK1MFJkTcO5HpKwdTaC3JMT+IO8/Rsa35g="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.0_1578979737698_0.51611761036059"},"_hasShrinkwrap":false},"0.25.1":{"name":"reskript","version":"0.25.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.3","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.11.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.16.0","@typescript-eslint/parser":"^2.16.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.3","babel-eslint":"^11.0.0-beta.2","babel-jest":"^24.9.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.1.2","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-import-resolver-alias":"^1.1.2","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-react":"^7.17.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.3","internal-ip":"^5.0.0","jest-cli":"^24.9.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.33.1","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor-webpack-plugin":"^1.8.2","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.33.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","rollup":"^1.29.0","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.39.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.2","style-resources-loader":"^1.3.3","stylelint":"^13.0.0","stylelint-webpack-plugin":"^1.2.0","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.5","typescript":"^3.7.4","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.3","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.0.25","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.6","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.2","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.0.7"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"ea6c750a805b3465b9804615da5779a83240a1c7","_id":"reskript@0.25.1","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-aYOwCyjwCyORlnO8P20Xwh319ir8UMjPEjT9AJH4X/XJyiYLSqstcAy9TGIAm4LmFLMK9qtgqMs6xY7WEho6kg==","shasum":"0343390699e5ba63dd438939b954417253858892","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.1.tgz","fileCount":267,"unpackedSize":314864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeHVc6CRA9TVsSAnZWagAARCEP/jCkRnAz3cqs1uuejSsv\nGRcidDtLeL2scSYksKVeVnxus3SrKgIgyRR2YgtEsaqP5myL5T6rDrzGs+mI\naRh8rx5S3SeSXodp4ScJUZJ/nEMgFLsvaITxUZfLXx4rMv99UNapRCtP7HEH\n355EuzSTRJDqVEN1T2eEB7fjoRObeJnhP+BBzKyyLte9YC94isSIc03SxnHk\npDRNw/wmVaF9exgl/17SpyxGSWTs9wX8OKxdkDQIqnFp1/HLek8t51KaNUr2\nCVVpZ2Ib26p9kgEAMEUqVBBvnnswZgsXTuNXP7kGBW/4GdYp00nzfPuzxuoo\n+epmV4OCxuc1L8eyBDlVAOzhlRPg3QMlThcjKg9SmxtjiO9h4jKOeUJllL1M\nERdl0RGC+gfOc0+g2a4r3uG18xc7u2zfk0E3ZIYY30hJzeOFyZRkj1/qAUHd\nv9Zzunw+Pz7osn7GoOqlWOPR6ohm9IDPNunN1xA0TYduu5MT4tBkRLaMH6VO\nQJOu+Xgis3RBvarpgaDb3EitFnW6xQCZuJ4BwELs1OpDacBmFoThzmedYCnR\nGqP9lenjazIGH7EKE98sCHaW8ceArRdxcLRWcWNt5dMsITNE00H/ujyButyn\nU2FGo+yYEzteQPOb9cNiOEOiL0uwjh5TmvUdKm/aFvqTuISvDUiLgd+jXAk/\naeVl\r\n=us8n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHuxuELgif8GRMBKb6SmOCFqJCWxjKF159s/8JFTmTPHAiASXcXrLrDpqGc1pyZn8NTXiU/hH1HDnbCRP8c4rDoGhw=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.1_1578981178008_0.7457159187618541"},"_hasShrinkwrap":false},"0.25.3":{"name":"reskript","version":"0.25.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.3","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.11.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.17.0","@typescript-eslint/parser":"^2.17.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-react":"^7.18.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.3","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.33.1","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.33.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","rollup":"^1.29.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.39.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.0.0","stylelint-webpack-plugin":"^1.2.1","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.5","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.9.0","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.3","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"ce65d8925f71770af13e097a19c5ad4066b99f9a","_id":"reskript@0.25.3","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-BW9OdZ1axRK5m/omZmUp8lNZDdY7bgUqMYuqXG8rQNfWRQed43yHqlySdI5MOxmGVR5zIoovSeSHhLQOn+odCg==","shasum":"6fa4516b836da735558e3caf9af22a98e85c940d","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.3.tgz","fileCount":267,"unpackedSize":314868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKCm6CRA9TVsSAnZWagAACpwQAInKkDSb9SIZQ4DK9Cla\nfPI7CuoajzsbUAPdmKTlshQhcXDqykpWvRWuh/gtrGNWrO6Z5xhwZQyUYHl9\nCrJybODGZhbuO6LbnJEYbryrvWwEe3K/RALQvcmNMGT709RQkGQBPkN2sf/Y\n5+SSmWwKBIIMbSY3BQLuQvKaLDZjT4H/17ulSW7ApfTyPpvsetQW7/aGuOYL\nVrfaBQ1zoTV/GQzckxL9MqzaKiCBR9xglMSCTQw4qDLnOEZ0piWcOY9wIhih\n7grsHrIaQXwVf3DQr4Y8wnVAs9OmSeNQjgyWUmv3AFZv6/5aAY9W/eft7pLw\n8uUgbaDElIuZNcTmpWqhfvtVWrpsrlXJTAwVxhImnT5qqa+w7vgCwIhLC8d1\ngQbRuFlXqaXZz6FebhUDs+uWKpD10vFjsLQGHpoDrensdujRSCjFLrfjFqgC\ndXH7BQMXQTNGBgvyaamIUnBcT2EMUJcYAE/31WDQoEcijjB6B0Qm8lTdWNsn\nPoiQQmisPQFek8fbRe/bfBfmuSJPoJDg0/DVCeEpzbhcOn0qUKSEDY4Vq9jj\nbF6EJq6u6A3JLrVTVii5s5CMBKN7Ih939o1p0nmb2TJ2DPxrcBesKjWm8ZLj\nKYZLXmeU/nX7ZRRgAL0ffWq6W36f5mGz3c/ZdCN0e++bvMr27Rf9VQ+8Sved\nNAiE\r\n=te41\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAaW+/wVGNLodq7sav6SktmWETL9ontv0ofehEXjZcRsAiBc79N3+ZvMXoVKxAC6zZpG9+lWqzmS5Qu5i3c9oT/y6A=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.3_1579690426182_0.8590087599876437"},"_hasShrinkwrap":false},"0.26.0-dev.6":{"name":"reskript","version":"0.26.0-dev.6","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.3","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.11.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.17.0","@typescript-eslint/parser":"^2.17.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-react":"^7.18.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.3","internal-ip":"^5.0.0","jest-cli":"^25.1.0","is-dark-mode":"^1.1.2","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.33.1","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^6.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.33.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","rollup":"^1.29.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.39.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.0.0","stylelint-webpack-plugin":"^1.2.1","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.5","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.9.0","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^5.4.0","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.3","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"dc1c85a81683beba89352877513599264deb37b3","_id":"reskript@0.26.0-dev.6","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-A7lSO0xXF3lyp5sHeuIU5tcVlsCPq8YC3V2DuhFQlvmhgF/eJHGrOfnRvtiSO3P8ZN8o9w/LY2uA4Z5VX3HG/g==","shasum":"3c78703a92071d074d5a64486c894deca23a039c","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-dev.6.tgz","fileCount":273,"unpackedSize":392986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMR3KCRA9TVsSAnZWagAAwf8P/jgVRxf/Y+lAB/O5N92t\n5g9RcmjlP4W1pzGAYHnfRb5y1LIv6iMmFcuEbcp4vdwGBOpYORQAXKlESy9p\nEtx4lUzFli+zGHjHkUb3JYU+Oetyd2ALKnvgNakI/gGnFpmY2PVI/cKPsxfS\nt9M+KWRi3fPqh6xu/JFBUSCOggx18XnJQ9GQKEr6sEiFSIb64HVbTtZc33ld\n0eABNZccQmzymH5jDErFk/m7v8jBz6HWGf2sNG7tSxTr/Ak+H4mp7KaPtApk\nDCc+cdWbDsXpxpjhfMyKfORAY/xeaX7mtR+tgQY6LVRmVjSbmFBFslAOnfRI\n/OKWxXNyXDXcRLmb1gYeZy5Vwb2JMVqfRDGlYZ1MuAbG18Wa14RivocDpY3+\nKtNv0z0cRo8FtEJrjbJts9cHX3B/rNqjKf44LvEwsuxiQ5xwmjyi/cbPNaU1\nGRE/8zJPmOExXk3V1Xx+Z51sazxizMr+KMQadLImnPGg07PjWZNB3wE+NMEp\nme78KuXAHZ8xK/5zPgBY9JMy33xqpSV7fZtbsC7PyQ6dPTPMVw6u3e5cBSDe\nGysIESBF9iSo+SQ4Wv/sYwMZ1eDrEb+33ZDNIwvNFeFquBrbSkrv19wf9TuE\nHW90BCAlgRK/Y6+Y/7H2Kwp+GlN0M9Vq5NqYfhYzJM6P2E/iiLtfpbSVUj0h\nH/EY\r\n=HWk8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkZSlBORQNt6aL3M83n1uEhOZ04Su7kI/tunkOOTMZFQIgcHdJGeuXCXLwG1X1zG7vNS+Lpan/vAIT3E5lTEvK4uQ="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-dev.6_1580277193700_0.16894674433232781"},"_hasShrinkwrap":false},"0.26.0-dev.7":{"name":"reskript","version":"0.26.0-dev.7","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.3","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.11.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.17.0","@typescript-eslint/parser":"^2.17.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-react":"^7.18.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.3","internal-ip":"^5.0.0","jest-cli":"^25.1.0","is-dark-mode":"^1.1.2","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.33.1","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^6.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.33.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","rollup":"^1.29.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.39.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.0.0","stylelint-webpack-plugin":"^1.2.1","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.5","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.9.0","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^5.4.0","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.3","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 更新依赖\n\n使用`skr update`来更新项目的所有依赖。\n\n依赖更新会自动判断项目中过期的依赖，并进行不同的处理：\n\n- 当最新版本与当前版本兼容（Major没有变化）时，静默升级。\n- 当前版本已经大于最新版本（如`5.0.0-beta.1`与`4.3.1`）时，不作更新。\n- 存在不兼容的升级（Major变化）时，提示确认升级。\n\n当存在不兼容升级时，会通过命令行提示选择要升级的包。此外，对于一些经常在小版本就出现兼容性问题的库（比如亲爱的`antd`），小版本更新时同样会要求用户提示：\n\n```\n? Found breaking updates as follows, select to update. (Press <space> to select, <a> to toggle all, <i> to invert selection)\n❯◯ reskript 3.0.1 -> 4.0.2\n ◯ antd 3.7.0 -> 3.10.1\n ◯ clipboard 1.7.1 -> 2.0.1\n ◯ codemirror 5.16.0 -> 5.40.2\n ◯ echarts 4.1.0 -> 4.2.0-rc.2\n ◯ husky 0.14.3 -> 1.1.2\n ◯ marked 0.3.19 -> 0.5.1\n(Move up and down to reveal more choices)\n```\n\n通过上下方向键选择，空格键选中，或者按`A`键全选，随后回车会更新选中的包。\n\n在更新完后，会列出所有更新的记录。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"7beedc3ea94c73ab4e580039dd6ebc4be2713e23","_id":"reskript@0.26.0-dev.7","_nodeVersion":"13.2.0","_npmVersion":"6.13.1","dist":{"integrity":"sha512-htI60UOSBVtAmvi1YawhYGISWMO9RZyMUbTEmRPjaSwggN5uSQYu5EZXTbnoJkjS1zwhhYdZrkJmx0aIYNUNjQ==","shasum":"752bc836401f5b63c19d349e1fd481e9aa6f6dec","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-dev.7.tgz","fileCount":273,"unpackedSize":394013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMSfZCRA9TVsSAnZWagAAc4IP/R/QC8OMvwgsl8905aX1\nJdMRKoK03Qo0O+Z6XH2FpAr82GPCcH5/vqPeYrrDx4bGxYaXISrpnc2J58Ng\n3DNYJYjx6uQJ3MMWMqVNN09nZgIDhuV5i4O2gSth7rXXDGmnlY8DzHif6d2i\ne7gmkOzJ0fqrG6gepTf0Gjznb2dKXPkjvB+AVV/HBsrsXAU5J6N4JWfZJXFd\naQqj2n0j4T79pRL55Gqmna72rOKmmArpi44nEe5Wq9OSKvmQIgcZ2bb9gJ0m\nyFtS0QRdFLGORuh6d/arX5CFZYAqJwMVF3BP9B6IDVt0RUhg+vFcC7aXivMB\nJe8uj3uHsHj6PSogXZD8ESBXzi623M4w/XXVN413FdYf8Kw3amf/8ImgHtew\nQbtDaJO1cwvPgPsMtJRg99563VOX6C/Eo1gtrYi9fMY72y0+BRAn5s7sKMpJ\nsze3GqxdcsfM+TpG708BxeH8HCCIBoXDN+Cvrlo1DFDj/NzlE5BRyU8hn7fJ\n863LQWZMwxguK9JI8/doI2RGUz8nRktXafzozcV9ifLiaswsnIyMy84vxVb/\n26RZfIyG1+IuA4NDgWJflxBLWncL24XNuSd3DiBH4hSGUIaGF4uejH+mvDVR\nUzxHRlkP2b0kPVRei3VL8By6FDoXgJ+ANic+o7+eiNG7aL21+h5wUTCzEpVo\nSroD\r\n=5ul6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvKVwWjA62KnJWB0jtIILzjy3n9GIBxWrs4+t8lV5MZAiEAxYe27/lah7dZjJYlz1reRr4sPmF39qGwMdevTYQn+E4="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-dev.7_1580279768890_0.38294620938503177"},"_hasShrinkwrap":false},"0.25.4":{"name":"reskript","version":"0.25.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.3","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.11.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.17.0","@typescript-eslint/parser":"^2.17.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-react":"^7.18.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.3","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.33.1","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.33.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","resolve":"^1.15.0","rollup":"^1.29.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.39.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.0.0","stylelint-webpack-plugin":"^1.2.1","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.5","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.9.0","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.3","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"439f2e8c9c9f2face5630455a1be4455870aac10","_id":"reskript@0.25.4","_nodeVersion":"13.7.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-1W2KBdoFpB9feduf9VcVH1mxFmwKnXOropZMET4LrVdniWJrmUIUS5JMu4Z84XV1DOc+57BSwyBPY9loZePr/g==","shasum":"50566f0a44d4b0bf3baf29e6cc8c6d8fffc8d5dc","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.4.tgz","fileCount":269,"unpackedSize":317872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeNT7aCRA9TVsSAnZWagAAYEgP/0rI1NPBqFjEABF0lgy1\ndXQ9QweHCEewNCPc+8mA5bZKQMPxg2eRO5nimZzLCyWG3OXPLT+HUjPMvYy5\nKEUnOhDNFiBFuhzTXCUMz7dQxQHH1Aq9oFMM45gLTZb86k+VuW/F7Er+Kryt\nVSscbSSyNQ6g2zkFtbSxZ8m5PT6jeqr4ZlXAo7eeJOnDzIs2fKsoFUYDKcX9\n6bAdDZ7GACBGHgtvZI5sYeYQKG6yvGhDhLxLm21Rx1nVvI+Nt3K5SU0nCm8U\nCtxzA913O7W9It+4dPNQp1AVL3aGdpfAdsTLuKdbG5LMrr7NuAwsdrGez+tR\nIjmMUgBZ1qph3JYpJYgA3Xx1F90yvr5IlvK/ZA1oaSIQqLZSWhMV2nf6NRb5\nBnQYZUtsm9fyyglYx0aL60jpQyuPL2vczmpj8ZhUu6sdbbg+75zZjvvUuQ1r\nKG89D2Uc6YflRPiRaWDlm457qh8SpvsPKGGJtNkFLSVPRPgjyn930mSeDhwY\nsED3aQtBTZ/Dp5IWtOtCtJWOixSeNT5jEB8G0goVcBl/VAkOqmRh1SYoy8hf\n5wwYMJhAD37pRnm/k1bqqyYPNJbyiOT3yV5NzsPGxVXALtXODcHsHcFrFB5e\n0TLvbP65ne0q4Bkt9tLjrxnUChZNKzhHU0m4Cxe9sWd95xl8xucF30Q9jkH+\nDXMs\r\n=hZYK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIARBA5ZH4qzajkaZQiML1iFxEWpj+26Mn0TVlzeP9ikeAiB+gu5O8F19fiCn2Kx59RAHc7mzB3FtuFxAk9i3PwTsWQ=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.4_1580547802199_0.760078656483457"},"_hasShrinkwrap":false},"0.25.5":{"name":"reskript","version":"0.25.5","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.3","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.11.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.17.0","@typescript-eslint/parser":"^2.17.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-react":"^7.18.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.3","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.33.1","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.33.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","resolve":"^1.15.0","rollup":"^1.29.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.39.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.0.0","stylelint-webpack-plugin":"^1.2.1","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.5","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.9.0","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.3","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"8915746afd39fd0bdcd1431e0abec048fa527f7a","_id":"reskript@0.25.5","_nodeVersion":"13.7.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-T1BrvoeMsa3ymfBJS1I67S/9SuIxNPeDO0QoHl1jNMdvDWBfCWvMBkd5ofHM5UOsbyYM7//kLMYw2eMfPEyZBQ==","shasum":"8acb329b68c888dd6d502fdea1dd3c4f54fef053","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.5.tgz","fileCount":273,"unpackedSize":321517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeORQ4CRA9TVsSAnZWagAAIK8P/jg7i1cNkqLxFeRQ4yXK\nbs2zYVDgOBqi8pyUdu3aY7zUDQwpMAjz0fAkJZkevaLJJ5cJqW7SxfuKUtKD\nlAlb2GonmlSf90opH8xqPjrpfMLtL5ZlnDC670VTFeqz5emxA60FMSst15os\nnEp+SHPWz9ZuBN7O88ALprLj028KDvGHH+m8EETAyaxJ53FnjuX7Bqhvmk+F\nR9SLjgUCr9Dt5u3v5qCtapkWL+5b2QjCR7+GlpALIiwEjrd/xBN36NpTR0d6\nYIT+XBIYlHP71EwiFuVpXE1nuZQiX9q6QULoRCzOSPchgRRzKscTkqmg0/br\naKDfiAFMtH1N9c3e8K3y35lB9FCQrirTtBq3oQqPEs0A2I4uGqQvprIBmskL\nopZ+4OyNe6lUacd5NI4fL9W2ySBr4loDcllV7RaIldO4i/R1ECF6GhC140co\n7Cxz95Du3CsDkqS3OztAt/KGYbzHI4cSBirxrO58r4OLdM8ji2K792GqLCUE\nFKOfpW+xN/i8EWUcex3WZYMj1evWasKMzjsXU3TtJdSHpJ3VeWdMpnx7wXbs\nh3WRyvP7PKQwuW0U4iQIFiUYN2ThBItn0M8soFv669FXVG57ZTv7RsgxYYe6\ny88o0b4afqNW3uCILmRGUCVdysWqr+egZAF9zRzOS0PKuRyMvLNv5n0KZywD\n33wm\r\n=HwXD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCczBjxO1IsiKbverh2qCaKwzYIVhaLOz0t72ZWsEmsNgIgfbGm8C6eZDtDXdSN+yyJDipspDdYoPvSl063w+7pMTM="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.5_1580799031387_0.5010462464809398"},"_hasShrinkwrap":false},"0.25.6":{"name":"reskript","version":"0.25.6","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.3","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.11.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.17.0","@typescript-eslint/parser":"^2.17.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-react":"^7.18.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.3","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.33.1","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.33.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","resolve":"^1.15.0","rollup":"^1.29.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.39.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.0.0","stylelint-webpack-plugin":"^1.2.1","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.5","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.9.0","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.3","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"cb1a1274516b0dd29123366ecde7573d71f5e913","_id":"reskript@0.25.6","_nodeVersion":"13.7.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-sI1oHV9jyLL6samS3vswuJbcxSfHQF9Byp+vWRiShO9lmM9ls8z7g2SnkZXhJsdx/jkfTnFcX36VUAImxNppfw==","shasum":"9c51e8fe630f6d9e1dd0c9da476b5452535aaf31","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.6.tgz","fileCount":273,"unpackedSize":321639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeOR3gCRA9TVsSAnZWagAAAnoP/3RtZTUfXvMlenux5vnt\n6HrT5WPPXHF/r6UnDvuotpE9pbUWCH3X4GYInG/UUMOo7CJvKzC4MN2IUM4R\n1d96ErH6tmNWnCApRnHNlRcQvViqZAbHMHz8CufCWXAcExImXU8Lx7Jdg8uv\n/ybcXOQDh2Rkq1O8kJUUup61A3XAdCh4tru/1U8zYb9fM9lQQ1+lx1LQn411\n+Ub3i8JSc/3clhh8zCFPF7Pj0AoCfmDs5F+GpqvI1PBNbC1JYE7gHe+S2RmH\neNKqH5s+TOWID26aKFrJskvhYLvBv2phlhVkLUgMDe1gur55NWm6DpecsPeK\nFihgX1j7VcvtBLBuXrk/vGeN1phpLBaZmQPt5GETV24njad+d/cVIqD9obZ7\nmAI83gXfY1x2d0MFIfm7gDNauMV7q5kKNlAECmUitfuMcLMaSwYfCdLlorW1\n6QP33s3zRujBZyDsXuzR+NZmmd2AFSB3f9lAsWFR1017UWfwBOrHa1aAR3ha\nsU5jJc5LgvkDZCIaMXXP6FljuVH5hoFPcR2ZCUeRVCN+dOklDCv/JWs3JyPn\nB1KxConZRjYOTu5zw+KcGvUuonvXE4GWcjhSkM+KTpARyBZpePkwfT+hYlmC\nM6hzSdYpQ03r16AK79ss4MuVGJbT7x5QKsm+7wHiOM9nA95fJKYJZGSOq+ET\neeHY\r\n=N+vC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+63Tm59/9M+MN4v6bJFhOf8jXDblgi665sUltL+fjagIhAIMJRo4IxivCZGjI73I3tZH6odvpXV0FPDBwlEkE3L8b"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.6_1580801503670_0.9624686132948408"},"_hasShrinkwrap":false},"0.25.8":{"name":"reskript","version":"0.25.8","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.3","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.3","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@sentry/node":"^5.11.1","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.17.0","@typescript-eslint/parser":"^2.17.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-react":"^7.18.0","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.1.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^3.0.0","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.3","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.10.3","less-loader":"^5.0.0","less-plugin-dls":"^0.33.1","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.33.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","resolve":"^1.15.0","rollup":"^1.29.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.25.3","san-update":"^2.1.0","semver":"^7.1.1","sort-package-json":"^1.39.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.0.0","stylelint-webpack-plugin":"^1.2.1","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.5","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.1","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.1","@types/http-proxy-agent":"^2.0.2","@types/inquirer":"6.5.0","@types/jest":"^24.9.0","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/rimraf":"^2.0.3","@types/semver":"^6.2.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.3","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.9.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.0"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"28b3d56a4a6918573859a9984912624b4fa758e4","_id":"reskript@0.25.8","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-VE0ErwH0D+evkV3K0V+XpXNmtevDFLW/Rfwr2jWM4DQPxnze6qG7p/HJMgi2ZDp6ug9M6yBoRpCLOhhuWKIDiA==","shasum":"727dc40c2346e4475f8a6567ace44cd3a3f80785","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.8.tgz","fileCount":273,"unpackedSize":321708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePM8pCRA9TVsSAnZWagAAmUUP/2n/j4GOX53AYNHQTCj7\nKhUHQXdwEFKMOJoFJ4Gp7d+JPXjETOfYnwPXkZpn+G0VqqtX92JlSR6+e5ON\njEmeXXpOhtkOxR2L24O5ZKdEiCUvt8C/aRp9O34RPPVI6ifRpb6v/1ilz7zy\nWdCBy+pvIUhI1FUlzUkKtWLUCScCSLdZ2+IbzUojypwbeNJi7TjDBq7BDp26\nuKwdQ8PTj0IWjx34mVUOorxuNIpXEhRS39uQvXVeefUDfQGqNLrRAtHGrJHQ\nwdbhqbPlaZxXzsAzcw8fTXezF1lkQEqxZOpk6tz+0l4xYAo1DCtBAjBHDtbB\n/hVJC4FfkbOTva6KxHkjql+5IC0pdek5mBIK8WDUe82fUvDvOZq2zZltc/nq\nXFN0jlDXiJbb8scDQlddPDMFwz+Ws340GZ/G14gJVZa8SfS+rb4mTWLWVkcb\nbockzxjYH3ehriN4hsa3oRwB/kfrRJ/t5FVqQvtUtB06pxV+QXR5Le6c1anV\n6O80QvwZEiWVDlxjNO68m5udEUtAOviwiiWwMl3tU8e/ZbHx8YuleARAk/oA\nyCsC/ul7WBR76RqSSYctFo5N7iJM00MXXpgxHq9chUsnoNCEgJgRTS+xPsq0\nRiLcR4bXzVWKz8icqHDVK4YCtLTFj6OWfeYBbm/f6K6X8ghQRZE9Mrew0/7C\nRjeU\r\n=ODu3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHTIRr0LcsHuOJuD7CYz7H41AxQNxBfqUlcjWCW53hpwIgbgaVxCD9BdbEdh9ddnCYkIMOXUCVDi3KF+7hHCqX0MU="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.8_1581043497092_0.367795022228238"},"_hasShrinkwrap":false},"0.25.9":{"name":"reskript","version":"0.25.9","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.4","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.4","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.4","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.3","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.19.2","@typescript-eslint/parser":"^2.19.2","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.7.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.0.6","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.39.1","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.11","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.2","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.7.1","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.6","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"34be77ec945821d721d3ef01ef71031f1fc2df43","_id":"reskript@0.25.9","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-NshkfsIZhFFSzi+t5ltKzNUZG3rSJTbMXR62fe4lC/zizwMS4Pl1WYHsX5W7uklHe9opO6tqcgS+PVGzlCYo5g==","shasum":"e1edfcbfc0bc7a66af2278cd3207a271844c5b55","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.9.tgz","fileCount":273,"unpackedSize":320768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSiQgCRA9TVsSAnZWagAAmtEP/AgRQ0GhmmNuRJyVneSW\nsbKTsECuRVzS+HqonKbLCHq1es6AVEwoZ8ZLr5qVqerd+TvOEP1ExFtO2OcE\nSP4Q0MkA1sjye9dC8Vn3uUDIxNBBzpKo4obH5XhGEDoNCcIqLniF5u2ZN+th\nq9PDDRQ6y1yQfpClwHd02hM3aqq4lJfzDU7SFYlwetxB8QlpM7jx7xjYMwDu\ne2C5d3JgNFqKgvbN7YYJRgCAKk6HGfbKTyRdZiHP0tNzKYwuiubO1fHDrHcH\njZbiNZSgAh/4aB8MK3qkrupLifMxWjFlwbe4JvH+1migK0aKE0ZBuY3JnzCu\n073CdRM4XaW64xZFgCLv+EWkPyfDwnp4qDqdY9r0R5gAIeTmFfqxvG1JK3E8\nCPqpxfmg1cOv5DEi2S8rfqOx5e2/JpXycy8Kjk/g5LeYiFjxQFgTtup6sIbq\n2Smt5AePHrnhUhQuK/CuXosOZN2bJLTssq05+d+2Cbahztble2yGMCSnZ+DM\n4sOixttEr53Vs1Xva9N6j45mpfRZGWNcc4h+0PdIOxB7prIpYctdY6ihj59+\nj8NsM8Lp8nHq8Gv7GofAOqEjAWTElvX+2/DsCtL/XGSZq3Q6Rbxn+zFoT92J\nwJ29RZiUmJshLxq3EE3mkd5zV6mq94EPaY1frlMsIqcGZPadc8mYv4B6xGr0\nvz10\r\n=ipps\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFQSjtXacSNWdIAdTYgEQWnFNkzA24UNNBnMvWvDckwAIhAMFftJ1l0M1YamV1lYBE67lMZIzVrlYXzIXEcPd1OkaF"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.9_1581917216074_0.03136837864214992"},"_hasShrinkwrap":false},"0.25.10":{"name":"reskript","version":"0.25.10","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.4","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.4","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.4","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.3","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.19.2","@typescript-eslint/parser":"^2.19.2","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.7.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.0.6","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.39.1","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.11","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.2","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.7.1","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.6","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"c690199fa1abadde57e1603f25cf17202f86c2e5","_id":"reskript@0.25.10","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-L33h3owbHqiNYG5vYksBm/Bx450Z//3ep7lawWqeyBntcSYtsddw6w2f396Is3TF2/9zA7Hgg4w6fhswFK+YNQ==","shasum":"f10eb3a28149301781027b628961857f4a9d2ee0","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.10.tgz","fileCount":273,"unpackedSize":320948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeTTpQCRA9TVsSAnZWagAAltQP/ih1ftfL3jQKHpjMEbTP\nruVa3HVNzbH+1lgBd0l+bfAuPDLt8SNAEKowtM9o2XXz1nzj9dmiE6aAgUQU\nq4Rkh8Da3dIjDJavt+MNHdINp2yVSBOfsGdyA8ghOnh0dRNlNaHM9PfecJBn\nxuIYbgEEiMUCBcnT1fwhwXzRAFDB1kATF0dFj6zGq0kQxznAd3JI1Ilsjq95\n3urxvQz2KzK6mZ5iqRgcWzoiaBC1Gj4451cClYcM+Xtfdhs5MNmqZr3HxKgg\npBblw8IONH92S1Mbfx9+HZo/deb7z7SpMVmA/t03StQUL6RsQNs0OE7WCFn4\n0g4EYcifq9+GdsdfH/X53YGYdAH0G8uOWlx1GBiH/yTiMflcIZSA4qPcJkH6\nHsKhIlctgKDFmdWn5ZyLxWY1Wr3R0A1fyYuwD/mb0K7dzb3zPZSYmlCIp09I\nn+ZW8L2h3CzbwLK5nNlJa6IbF7BAxnlapGY5/UeI6yXC9Y9TZFZ1EJZhNBQT\ne5GpM0hhTaYiZwC6+qS9RpplCUCmY6AoFdtdogJNSnBqKtspUMJkbN8TLrbv\n/kfkVQnTrzvSNq5jC6AJPAjI9ftCF3UgJaJOamiS9wv5Nv1bFzTgnq6HLTWm\noih1OXARKEHnF/B+abOc5oW+oL32ttvE/PWlDkIH7UQHjCudQaR4z66zwoDC\nvxb0\r\n=JL5M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDm+2Bgzck9vcHK6G9oEE+8ERSvisEh8mXDZVbwp9/q+AIgL9ZjZtQrxgp5cB9d81FqRfnintIxOqMHq/cwFY7assQ="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.10_1582119503780_0.0405978442365762"},"_hasShrinkwrap":false},"0.25.11":{"name":"reskript","version":"0.25.11","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.4","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.4","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.4","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.3","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.19.2","@typescript-eslint/parser":"^2.19.2","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.7.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.0.6","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.39.1","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.11","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.2","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.7.1","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.6","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"bd30ecc5201585b391e522220de7e19e33e7ff98","_id":"reskript@0.25.11","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-T2cZ1GDd6Iw8J2u+DM5fRPAJ69I/kw6bBQpeLUD1+R8un+xSilCUHVphZlYAK7+KBkjuZVuW8jSfSZiMInwDsQ==","shasum":"fcd4d7fd0d08ace526b425eb48187d72cef7853a","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.11.tgz","fileCount":273,"unpackedSize":321252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeU5jOCRA9TVsSAnZWagAARYUP/1wCbdlTquPuG1JXtyMm\nbC/JFfnUx8AoN5DTpxfJvvDxjkxFJQZDToItcQ6105Fxwj3IFp6DIoXRm1BR\nJ5uDL6pSgX7Et+u7uVQx1YYNGJOsw2b86uY9se4b1TtlAWFx2rUzOJMAbcOi\nCcKQptKHYAQUHJzcruJz7bU+x1DdRqxGRtDGU0e5RKm41sctt5zzyxiJnXW1\ntsWBMScnc38T3SDrrREpW2RX/h/3s5NKOci7xpLpMEMd24QbyALbqJZ5AUkW\nMwkoir68QAYMF0Qo1EZVKfCh+JkhYRRtJrpXIveuKeA/LeHhTRzIw2jrp3DL\n1p+x1IqV1jIJ6seafcC39gjJYF3ATqXnNze00rwhAKd+rKJaU16XkrNc3Znx\nDfyr4jaXTmkF65HRcEx2ySZXgrfoYmBepmzDJFhPFEwT9VzYNrd+RKGfqbVF\ncSg/Wfy48YUwiO6AsBZjfUW3+jKafbmNARq+2liyGJi9yRdpiH0TrwCd3/ia\nPKgx9w00n04VVakEJVUoFDwUhigp7883W0dOQEnIKDKx2j/tftcIbQBwaV0B\nsejWR4lVKVu4k8+nrf3VL7rkcHe2WniJPuRNi6O7uPnQPSRJmnemiAGiLpME\nDmzWJ8+4PS7lxaXoZfMYTa4g313URW9hnfdcxg1jV10IQpLBs+oBYEEthuW5\ntaOf\r\n=X5eP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDW9P/+W2qs7fhFL8r1l9/cLjI2Te5e1m5y3lIf80UYwgIgKPlSJeVp/UOU3psDHw1TbewPhn33LAp8Y/L12ngp3kE="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.11_1582536909739_0.4810873401796403"},"_hasShrinkwrap":false},"0.25.12":{"name":"reskript","version":"0.25.12","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.4","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.4","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.4","@babel/types":"^7.8.3","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.3","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.19.2","@typescript-eslint/parser":"^2.19.2","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.0","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.7.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.3.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.0.2","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^6.1.0","imagemin-gifsicle":"^6.0.1","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.0.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.2.3","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.7.2","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.0.6","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.39.1","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.3","tty-table":"^2.8.11","typescript":"^3.7.5","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.4","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.2","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.7.1","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.6","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.32.1"},"gitHead":"2f677328de11070a4f637ede8912c5d8012a683d","_id":"reskript@0.25.12","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-YklBZDJOl0Lm88romdlhO1yS52+EWd80URjSvEvwS1a4Eo1duvt0XgDxi++GmxjsfEI0qvJzaTIX3U+OBDKCPw==","shasum":"f5798f009693ae0610eb98d6b5f41dad3eb4e263","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.12.tgz","fileCount":273,"unpackedSize":321164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeU73yCRA9TVsSAnZWagAApfEP/3SftTlTZG7vhfkdqOKk\nHRN4Tt1eKgOZ+xq8vQ3bimT/dBQKeH0JCphFgHKecrofsm4/OlP98VnS+q5N\na8A1TK3DdLgnsze7f4/UxQX4Gd9Qx08zeWTXYO77QGs1AGBqCB9xjhUdgVwU\nZpP18pVh8/1UBKu+qE7iYCLloQdMGD41XcaeMijrReN6oGc9SR1gHacWJZjN\nTMjp5vNayiGoIQ6euF9KFBt0Cqs3Hpqr6h+T5VqWivR2HKSJGYra0PSlQXdG\nSX+X63hW7jRZ7Yt8O8mUwkDLQ1jizrwK5AwjUNIuRlKfOHAuwRcBJkIqok3O\nEvKD9nYb+sfbmWJuH7AQU8Y8orT0f4aRNAboelDJo9vw+OzKnK1TKttUoWQF\nl3kKub/H90OCLn8vWLIofFDr+V7mTOf4XY75IRf8XeEztcCiMGRNTwYdbsYB\nlfiuvW2LuGPKONSsP9PK288GTi8Q+egBFYLPV1g2LPHsOOBtHFq/Ull7Iwzl\nWFWeVuI/mcEajFcd2gvguXHKD1BZcRBZCW67x3Uvgv+CfMnIBOPnqJFChg1e\nV6RoTL3hKOMeNfOKRGBfntlYBjp9c+YHSiEbLgfWPEDwKtO0p+YQc2nK3KBw\nZm5YIADd3USRz4J6eST8AAPs4vGrLRON1F+npoZGnqYUj2sGhplSwY4S0lsw\nl/Al\r\n=M+K/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCc7I3OjX0MY6S4FYdDJJQp/yAceB6k8Izb8KOh+yN69AIhAMdK2Gx9rXZKo2BRG8qKTV7fUo2jbU4Cr6nrlmuHA9N2"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.12_1582546416941_0.020248671193873635"},"_hasShrinkwrap":false},"0.26.0-beta.1":{"name":"reskript","version":"0.26.0-beta.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.6","@babel/types":"^7.8.6","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.5.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.1.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.4.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.8.0","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.1.1","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.4","tty-table":"^3.0.1","typescript":"^3.8.2","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.3","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.6","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.7","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"7d8956f3d10c493e5827ca87cb6cbda69d8c6eb7","_id":"reskript@0.26.0-beta.1","_nodeVersion":"13.7.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-DIaQRu19uBgMjbpsqcdn4pBlX9g7SnhHiyUypij43dk/AqPKhLfBODjVhxstlELs2NebAAH/ska166U7uHV59Q==","shasum":"eb5d112bc28926245003c089df179c28712c0c12","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.1.tgz","fileCount":273,"unpackedSize":321181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeWIItCRA9TVsSAnZWagAAFnwP/jcrp55tLmXZFMKbXKaJ\nu4hJC/TQXoPboa/HNO0w0aSljUWe5Whkn9OlvADEiwtyVSupohckV8gWlrpt\n2BrF1L2npafk/d5aXIxbLondYMpePROkAE15aWCfxKYEllPMgPPe05no4AlB\nyu9tZQLEaU3vBRsHDCC6oc6QVpz7MIxFuPAcahndvWm9Utlgu61M0iDhvpaR\nkakshbh0NZpEBLF6gKA5w0EXSkmOfUjH3MmdPW/SeFcp5doT+PWRGMwyEC4O\n9gDeI7jJrCOwvwh4vTeKLUH6XfFzZ/CgIEY/PYvG35FbEYufNqztVXhYC4bC\nqid+RhtRV9DaHLAYjYWs9+BEloIIhhQ3xwUzol4lxu4yviACcswMAChlmvVT\nXVVibxkSC9Q2tTMyqux0dj1Oju9uI04P8W5+fqNiji21BJ+gpQXUD3ZBmyV+\nBBLDZ8C9rBXMLTv00K70ebiUPEqmMd6erigcQWXWeQE3FcISNXQmRwbeVtP7\nssog9fNxKIuvS8gSVbR+P1Cz3fvIa9Qun05kCKbVwX5rIGrp0AVFFLx8aNbR\nGnJvkDZDS7CpHjubmRhiVfsmdYmIKBmFKujRx7dT7BvXyUOAPmCxGSJmS2um\nOSUBqTHthyNvANewwQUgsHsibHhW2Ta2wU1CH2BOSFLl9Nzb5bUzjslRjZ5n\nS7n2\r\n=8WpH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA6jBgKe/mGkHPkLCx2iF25B0U+OsKUN+2Eydj8aPtxOAiEA3p18CWyZySd2rUyws5LZ2MGy6GuyNmB0ftQeOtW3I5I="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.1_1582858797231_0.25260181748473687"},"_hasShrinkwrap":false},"0.26.0-beta.2":{"name":"reskript","version":"0.26.0-beta.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.6","@babel/types":"^7.8.6","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.5.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.1.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.4.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.8.0","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.1.1","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.4","tty-table":"^3.0.1","typescript":"^3.8.2","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.3","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.6","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.7","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"c06f0883afba8d71921f0c33eeddae1af600a30c","_id":"reskript@0.26.0-beta.2","_nodeVersion":"13.7.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-llCpHukG5EPNaP60tmNYL/MlYNwlKhGKUZF1b6WxCPr8YcorZTY1x0kB1vSK2wzdcbxXGm0I8TiG/JulmLfYfg==","shasum":"47a7f0fab89820ecb0cfe0ddc73ded038fa734ff","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.2.tgz","fileCount":273,"unpackedSize":321181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeWILJCRA9TVsSAnZWagAAk9gP/ApmICCmAIgMytxsrsFE\ntqXM5lzD22aqAeg1JzxFPTLNMtZ6+4rwGFu48QCVSLZ/sAQaezEgeThWNQ7/\nB+mcIBbwwHux44qHZU3/VxivZxErwtHT5zmZG3X6//M2swFUFdZzvxkSGPBh\ngqxwvTE8IcbCCLvz+v2kiCq7cxWNaCxV56nBeic27h9cOSURTIaNu8H91jpi\no6Z3KTYIYeAA1r/nGpzLplSCAffFXRB3DlqxYmBTeDL3HxF+cQ8IEB9JtJEI\nUxgVn9q4qv6R5K4nU765WR08B9/lSCXuvKD6mS/RgOR0v9OQ400J1doRhUdx\nVDbW5BvW+SYcfAEcTGz9O70jjH0f7dSTFgrs8XWYVNKxoH1rlJ9vlolN7qCQ\nnS+qHtMdUbxbvJmBLqEKvUT8zN6PV9GPHfJeWVE6CBn5Uiqnu8Q8wKVuAPAS\n2abfRBdopViPEA9vTMWkxL61wxfyFYCKmvhZmvVsyWWypA+YACKn5Gc2RpMB\nSkA9rZHx4FvcGBZFSg3r8ewkEHqU31atzXYZqDEHNQ9mTTCpfQOxTtqP5qQ4\n+TV2HXek0lQt9zysQBCM30pfF4C4svoMC/Ud8czMPZcXwhE1Z6d831uWkyAd\nN8VaNW8IWHnqY0bmX7Fml3WonGeaaEUT0S0pz5FjL6ToSRj7z1rAfSAMy/oT\n0O/7\r\n=EGi5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGnLas6MVYU12E6h9+VONIgnE24qLcoGHne0d4EgSTcgIgMjSAslr1kK+8fO8GMxXi67ggdehuY8y8QDP+FUYA08Q="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.2_1582858952907_0.1873175684776145"},"_hasShrinkwrap":false},"0.25.13":{"name":"reskript","version":"0.25.13","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.6","@babel/types":"^7.8.6","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.5.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.1.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.4.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.8.0","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.1.1","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.4","tty-table":"^3.0.1","typescript":"^3.8.2","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.3","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.6","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.7","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"efd94c7ffaecd11ee82bb5aba6aa89026c116d1f","_id":"reskript@0.25.13","_nodeVersion":"13.7.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-pO/ETqg2Px95yeNNQQSi6IHj7PJ8bE8vLk+E0I4wzXnLgYjjBBYIXcC1kkoTIlPW4tc/NTNO7Op5NaIFbZy65g==","shasum":"9124a457a15b442a304205e549b546834ea468a6","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.13.tgz","fileCount":273,"unpackedSize":321175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeWIeFCRA9TVsSAnZWagAApeAP+gPI4Fht2+6yuDsy8MTw\n6iqhmZ8UVlRI3cK57KXqNe71hcGZJ+SOZvfMalrbMONLWih9c1GRetWpbPcC\ns70wxUyzIEPN7M7ISqsg6KXNK2D54XBKlKkvN/f3IYZXUTvnA6CIVpG8o7ej\n7dcief7NoYG1DWciq1gIqjn8ShfvELOyiPcQgwxC7akBxcae1Is8xHqB22NA\ni9zYpVaDv8nquXM+sWA8R+nRMLUBoIwjXdyu+l9CeF4WUOcZXidVM/MdT1tQ\nHKjqgwGM28u3GXU1aSdCzZL0YMXCoROE5sgVHQG2tU5syjD15AEg+eJVJ8z9\ns4UE/yYaaYzWVXucHN79ARD0HrAlp8mYar1W60WVOt9ekqxi9rgy/3OWYZci\n2ewGN3iy9Mo8j3SY946FR7SV4n58AqlXqymT4f/w5G0FH0vElbNiicRkGigB\nfpQxhGD8XCn1DmhKjV7CCEouOS2+jNIqqVeefb+Gy9fgG0hitss7BCu4XXgP\ndAZSEav8o32uLhEXLx/neanN252yeD1CNjHNvMycN9TKaUW0r81xcWBQgKp9\nPg1oCH87JjvVQymXl9EkDQRmcQcqYWEeJSUJCKHBgcFhRzH7W0hDixgJ8oBL\nuyfNCyjTXpTRjW5opA75wCAxERNUG0e9NJjpvD27ny/PwzReI9Me3h9MPCja\nOaYr\r\n=MfpS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDh9PK/LD/6kXhgTEEebFLhJpAPKbNoUqsya1JiRzKLSgIgdr2YhTqNohxvfHfNxafLVzrERUo8uLQ2E2TgvPgvcko="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.13_1582860165186_0.36174814733492555"},"_hasShrinkwrap":false},"0.26.0-beta.3":{"name":"reskript","version":"0.26.0-beta.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.6","@babel/types":"^7.8.6","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.5.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.1.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","is-dark-mode":"^1.1.2","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.4.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^6.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.8.0","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.1.1","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.4","tty-table":"^3.0.1","typescript":"^3.8.2","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.3","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^5.4.0","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.7","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --src [value] src/ relative path, in order to resolve @/ (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"a9ef80802a304c8e81a04da7bad8948d20381f30","_id":"reskript@0.26.0-beta.3","_nodeVersion":"13.7.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-cMQAIj/MH4Kga15siY6Mg3KGTRW2McTusE2P9dpr8oH3qPX2KTYMe6F7jaIFEQFpz/5vnsY5Qi7bSN1kKikxJQ==","shasum":"ec5f1f9a21d6e6535a6bbebdf146f70aa3e732aa","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.3.tgz","fileCount":277,"unpackedSize":397781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeWJvLCRA9TVsSAnZWagAAfSsP/jIjgffYP7W0lDi1eaOY\n+csXm5bGIgieI88AV1uziujjzFoEa7TA9f/Ud+V8Z51ScjBeXigNdR9BdcTt\n6hmJryzUwk/kOLQG45XZf4Ai2i/+XdCAVLVBP/hSGSJ2UhvXkJbzqWPcMfKs\nsyeTaFanc2Ef5Id/Qy3z2BsHf8olNUevjLHagyqHG1me9aHPtWePxi5v3YdN\niAJweiHmRp8fGZclzVJBp6I9FuNhcXsDJ5Pt8xEcoHo8+BMugaU8m9HuFhaT\nuFeKsvrEoFG51vum+SMUXL24i+1a488qbbt380qTDMEPinFbFvwoJ3vNo6kp\n1XNLbiNQ1IoFs4LttWIZDUz9/Y4CARA1nCbV5DFY3eMCBkPieteYvvDix4NY\nWU5IgEM67L1/A8GdkGcAwEM7tcQHzLp3sdif6WWIGCbza0xFIhauEgD2IazX\npA4cdB7VjdfFxofNvJqo/Mq8wwAPXxzRXuE5V8j3VxAd4bAMGymeLrDC67ni\nEOXJV6G/n04t5Bl3J1g3JygSlkWFfZ46jbt04GJm60Mm1sFxN6Etmv6JnvBx\nJ+vt9EuaI4vUOUv0YARPbr0YsnqUGsI8TKBuTp81K+2Wh5dlycu5echSrtT+\n+KlYY3hwo0okebFiEx48bZeWwoc8jDhCjLaV91OHVWyPjZUJJk/3q2o6sxuF\n9RV3\r\n=MJwo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3V3AUOJH0XSMTOWVa/TZjzYELR8yVYQYVX5eFSC6zdwIgXERkOeS6I+5ONQTtzt6t3rnGtRK/0Kmc0chv9uStgAk="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.3_1582865354609_0.30503604948068586"},"_hasShrinkwrap":false},"0.25.14":{"name":"reskript","version":"0.25.14","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.6","@babel/types":"^7.8.6","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.5.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.1.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.4.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.8.0","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.1.1","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.4","tty-table":"^3.0.1","typescript":"^3.8.2","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.3","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.6","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.7","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"a611507bfd5161b2c89b31e8014816dc221e3d42","_id":"reskript@0.25.14","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-6zMTj50LcA/jMVyKOoV3S+cQ7oASO1QYEGuMCQG6GjcHkHxX07kzIWClks17JemZx87pkuxocRzhduuv4wXsLw==","shasum":"d7f8f7878268876c2ecb5c3c180c5d9d2107d1e4","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.14.tgz","fileCount":275,"unpackedSize":322657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeWfBbCRA9TVsSAnZWagAApVcQAJVVnMRmdqfopxv63yUc\nrtEE2HJ6HpnD+TG+/3q/CmlrJiI0qGzqZNd0ovA7VQvWuG6OnLGTy223aR9u\nrwYhe3+TVRtzSdqHWDM0aqkl+j9WgsFni2GPqrpf6pmAXQr30xwoRLyathCl\ng64+iAWGrksAnsM0jj+nS//bEwyKyeggTArABOY3Cc2v0cc7k7CO2/128qOt\nQL0kBXQmFRyOQO/WFUcGw46k0Xro76ZFxda9cLewb9cQuByHs4dMQTtgEE8x\nQiWXbga8zggCtGhUkz6T7CVQyL8gXY/P/NnUFkmBE4aA9mFUv7khqBf0lhpk\nzw9QpP+fKrD7nYoKTdOLM5oIt+O0vM0u6MpC72FnwMLcqctR5VNbJBPLPMPJ\nXa27IUylwgh2CKkIcRvmZpiFaD7CWBMbK43cUQnc2CobAwfFvEnaXZlvGE3Z\nFlswU1AQBloeVOWEgR5JrcZlQnr9lTZesvmRMFbOt1dm1nbI6n8jNUSRFafV\nOrUbRfU3gkeKgWFKq/q/NWOK+3gE00J3WYK3ApodtgSdxOwJvc13X/s+cWq6\n3sEUx53qZ9SPuwHjkBuQMb3t3+v4X/mqy6Efyy+rG5YtRAul9Whym4Zti9Np\nJI4PWcX8S58MSzHbGbyw6VSNnqAyropi0A+rpBGQL/wjrvKrYCZNTAOMf3ke\nyNRW\r\n=4vZI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG3IrxBtOgHOVC4A+QpEg3U92lb0v5ni6Z4yU9iICmuVAiA9riV3F9U7xfoGUBnYv+fyq3s5wuBQz4PX8id34gcB+Q=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.14_1582952538484_0.45384132372110164"},"_hasShrinkwrap":false},"0.25.15":{"name":"reskript","version":"0.25.15","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.6","@babel/types":"^7.8.6","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.20.1","eslint-plugin-jest":"^23.8.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.5.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.1.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.4.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.8.0","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.1.1","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.4","tty-table":"^3.0.1","typescript":"^3.8.2","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.3","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.6","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.7","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"69a6c1efe946607dae4f409d4fbc6d2f7cfac64c","_id":"reskript@0.25.15","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-s4CqmfMJ4C1yNYK8b6H92WYTCysoD9W3Gyyl96SkQHoE6Sb/N0vAFF+SUZM65aZ396VtJb6PE9tb9rRyb9EhEw==","shasum":"e2c665b9e3b9c73546f408b0c8a40ac773e37ba5","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.15.tgz","fileCount":275,"unpackedSize":324203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeWfreCRA9TVsSAnZWagAAcJAP+wacennxMJmlyySoQz7q\nsyPFLPdjc2loeCGkJYZwVtNqp7CMiHecSZPj/ZLUjI0M0T+o1FNCrjJwptB3\nQX/FPkA5/d3xdyHPiosk0pTutet0sXBopE8o9voi1qWZw/cIkL9iQGV9jRLs\nUy9rhUAlryfazwwwTpCXImk3eMjpFuEjcyiJT0Mho5QegZ2QIAuJ4pnfdvV5\nX4ijT2cKBOR5BDWXoBtSk4JjlMGn/90uZjZ5K7qAmQTZqHIiR8MtZbF7t1xG\nSvOjS5X5MIj7o60Lmq6u0Pa0LU1NlH8RhD0ZOu0ckweB3RwjFk48xnzC43n6\nobRzgFAf9dic0Gx7vlfUaI9R6owCRPQjwv/vFi4GjUGXwpg+/C5nuPsXn5Zj\nyAoHx4yOoMEZhuLR8RHo1JH0bf+cG/SXVQ6B9PjMZh2qnizyMq07NBJJeRcN\nsvnQ0qNgRVBVF+24uUTHY5X71AzeAstKNYPJJR+XWs2bpdmAyxi8YB6K3ZV3\nlswA10mBAB9igtO7fcfLO0py7VKJFt5MxSrHYiIwWb3cFMSy8O6AGEkk4BYw\nb0AHBGWYbEdo/q0IPh4Cc2E8XDORjhyXg3toFnAkwUUWF5ls43Q2pUrnre5A\nBVD5RUZeaHl1Q0ohXw/eK62OwnTtYjVi4KWkiIjN6YOlNszOR48Q/hXta+hj\nMER/\r\n=9pZD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD611De6wEQQ8cKAVrFGHcjqMjjCaZV1TroBQ2p3pdzWQIhAKnH9HnD6W+IxFn8gyy7uTnDWSsF7gFsuN+cX8Afp+Ep"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.15_1582955230367_0.8095841338184233"},"_hasShrinkwrap":false},"0.25.16":{"name":"reskript","version":"0.25.16","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.6","@babel/types":"^7.8.6","@ecomfe/eslint-config":"^2.1.1","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-import":"^2.20.1","eslint-plugin-jest":"^23.8.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.5.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.1.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.4.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.8.0","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.1.1","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.4","tty-table":"^2.8.13","typescript":"^3.8.2","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.3","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.6","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.7","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"da88c31b93cc06d057f3399f264258e0aca947df","_id":"reskript@0.25.16","_nodeVersion":"13.7.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-jvDa1K+rz/ABOjl4ZHMGrIvb+lnntD8Nudfwlmt9SSK+DA2NMDD/ifni82zVueDqFI+TNm/lzppeS145OfyphQ==","shasum":"a49e1688e543fbc774b283c7154a874874ffcb6c","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.16.tgz","fileCount":275,"unpackedSize":324204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXfahCRA9TVsSAnZWagAA4TwP/Rh6JabuGKNr0JzrHDPR\nAJq1N2DunVMzrNig/awKbaQaShTon2g8naeq7A8FN017g1ILjT9XPrGT9MGL\ngDMVc/b7FuZR6R4CLT7OrrSK8DQKQlxrt4tqYLSYCb8y6D+20RRO+mdDGrj7\nhFpN+g0OOil3gcqw/8RhRmuElRzeTFZ22dQDqss6raY8AiOe4qbLzTpME6sQ\ndwL57/jtc/ScDjhS4cPP8PtOiDBGlMYFJNwy8ScvLA+ROmiehujv+4Hm1Nwl\nVU6ZuRRa1cNUI2nh4Wg0um+CoJM2wvarKkA//9czgrU3DjScKB3vgP4FA24x\noySaBbE68O7iaAR+inJrI0QfKTvOsLpalO2rxKA7cnrjAE4c6ZFbPO5pIODT\nILrIIrcZPIp3Fa9b5cQzBlPGxVDZwSfnX3WSggVrenUt3NTh26nSox5DsrWm\nsAL9pg4nbZ9G9urPJov0Qy4ayn/YvxI0OOgTEJa+86e23OS1ke3Paz4juVGz\nZbvK33ErZbHR1Us9KUdt5ilU48cR3b4TOfe96lupDRnBaHIEaA739fzRuwx9\nHj43cuu50ZvCZ55tDpoj8H0+05OGHelPU7NxJ6cAL/0ieVjBxdE6Ivw32HB/\nAW+IsT2axrhq8eBCHqjwZBWH4Xvo+uNu0Dpe1y8Ag1fUnJKHlhAAlcGCv9m6\nxz6X\r\n=vkia\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDizVg0pt4M7OJiscHoXIb6ITSJ+xEo/+/tjdgw3E21LgIhAKISteDssiEXFIe5B1Q/WIDQG0X+9iZJ+KvYFmkqFIaB"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.16_1583216288338_0.9397096114064596"},"_hasShrinkwrap":false},"0.25.17":{"name":"reskript","version":"0.25.17","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.8.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.8.3","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.8.6","@babel/preset-react":"^7.8.3","@babel/preset-typescript":"^7.8.3","@babel/traverse":"^7.8.6","@babel/types":"^7.8.6","@ecomfe/eslint-config":"^3.0.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.1.3","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.12.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.21.0","@typescript-eslint/parser":"^2.21.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.4","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.1.0","babel-loader":"^8.0.6","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^4.1.1","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.0","eslint-plugin-react":"^7.18.3","eslint-plugin-react-hooks":"^2.5.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^5.1.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.0-beta.11","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.0.4","internal-ip":"^5.0.0","jest-cli":"^25.1.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.3","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^1.4.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^1.19.1","print-tree":"^0.1.5","react-monaco-editor":"^0.34.0","react-refresh":"^0.8.0","regenerator-runtime":"^0.13.3","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.3.3","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.1.1","rollup-plugin-terser":"^5.2.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.0","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.4","tty-table":"^2.8.13","typescript":"^3.8.2","url-loader":"^3.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.1.0"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.3","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.7.6","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.7","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.0","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"619fb30cd5075fa86d892e9112d61be3c51302d4","_id":"reskript@0.25.17","_nodeVersion":"13.7.0","_npmVersion":"6.14.2","dist":{"integrity":"sha512-tIY+9kcHkQK1XoX9hHdfMldNQHpGwJO7qjQy5gNy3vQGbh3AILAKg4Cs4F8mwKXMRfnMWv//SZmMd0Omc79PEA==","shasum":"ff25465a195c73018311396917105865b41461c3","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.17.tgz","fileCount":277,"unpackedSize":326019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeacrXCRA9TVsSAnZWagAApK4P/1sJu9iAxddhy9WeWaVT\nOoNl6axwBusv3k1f+lXiTAXDTGJR/Xldoc+4SeoKfBW7CL2kLaCmLgEo5Ddl\nu9425tbWzbJRmMfz8BYf1WR1vtRWwhL/s28kyogJ8euDLBTl/HXDwMTMM7Pp\nkpB151/wBmLmoiuwMtPChVEZkOVBmAG7cIxOMfmkTToemG1uo+4FY5/m13ex\nvtGDxDWM5P1xl8o+mZu2WCjbYeQIiAAagbIh+GNROUIUhUZMQB2W62lu5RMR\nYd1AabatSRwgMiupBincWeNGX9sUO/PhtbCd7Ps0hVpqeVxa8IBWqszJczHQ\n/WH+f3GOB/Tr/oN+416b3DFtd+YCrK17f/KY1wrjLrzVyH7DP1YYvlRV1Mi0\nN8EjxdBhdMhz/ZtilLsWAnYr/coJqbHSPBMdt7ruxQPGC4f3cue+w1+yOtS4\nNEvbouaHUUL6kOyGGEtc1ES0YRZWjAzef22gP/RX6qPnMx94Gd2+BJYz/jaS\n2JaGjGSjtwvO2JceSoH7XKaKwr3Y9VCqFLL+soSjHTi5G9OHncleC53umfYW\nO8z8IUoBpQOLu6X7/ZjFfSC5mpzVwgXqnXpExgQy6iFS893juFeRuMwXib2D\ntHXuNEOkHypMfpXIBt+6+crryCxowHEj4OYk4NIEYL+0FqtEDCT6CI5nJszg\nHG3r\r\n=MbGg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEbmTRKpGW4ShcKf6yiJ5KmoelJG67QA2tsWdgsjqJCbAiBtQpL1vrFX/RyHL+s7ksNL3HcJ+/c3o22ol7qrvmHsBQ=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.17_1583991510548_0.2686471300490971"},"_hasShrinkwrap":false},"0.25.18":{"name":"reskript","version":"0.25.18","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^2.5.1","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.1","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","react-monaco-editor":"^0.35.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.3","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.9.3","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"45f9b2c7835e4201136d2725f783cca73fa6ba4a","_id":"reskript@0.25.18","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-iZsdWBo/JlFAYTvLMkO6z2VAv4FeWw3b9ot91zwvF01ANJOjZ3aKuc8ic7XcaqStmjy3mvHM2QwHlek90P2kIg==","shasum":"001d559f59a2cb97bea16165eac384f5926ece65","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.18.tgz","fileCount":275,"unpackedSize":313708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefE3wCRA9TVsSAnZWagAAg7UP/3tJlXcc6LIuilQKVlX2\nlCfFvXWNdAaWoc4tImEM6HJMb07e3u1E33y0IR6Jst4/FzR6svSmztmc6qPj\nHo5/0cTExbx1jb0KPxcdoo2p+WTf72gL1LAKlpzIgRvbviF6k6r4euW6xHqn\nJ7A3XpfEe/ukB/XNxQINIRUif6yIsE1L6rov2FIniUVOMiZphc13zjcxxxJs\nvwwUQ+MuBhiEbfRZNsurlSVAvALsK2sk9vLFTYfUObnSQTXc9E/mj514+O9H\noh3BZEFG3/0ZZ3EAjMREdh2p6GeNndqq+gn8LTBkeLeFDZetBtlwiphImozO\nQ9zzmXThcqvtMQTTyd7XPaS8GDQu9D6ifS4oBL8diQqhtVyScutu37CFj5F9\nNhV1SpRslKUuSKcLDcaXwqe737Gh2mv/HjuAqE1pX/V6irbgdWWZ2q9GTCtH\nd4jq6nKdUUXnZYff5WswURziSnYpmm3XxoSlvn5fRZshF+2RtW/qXEFigi3Q\no5SkxVnSmFFwJJcZnSKz9NiynqpvPoXvdql7OdasAKkpXtvYElj4WZ5xO+ei\nyK0Z3oMIWTyiutUmxmQlUxm4kY3IVqyCS5Q7FAi4bEwbIhPZtTp5TZO2c0u/\nrh8GiEphl9ytSTH97PYwzjFQZRsjBHs+dL9Zo8WAgmEkSzmzlQPURINr3rXq\ncyLm\r\n=I4kK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsKS/wGEV6LYFBvb0BFTVmeCzme3u8G1mqhOJJ8KxBSwIhAN9G989yl/rgcnUC9WL4WDVhMs1Rom+FEnmpbXKAn/6q"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.18_1585204719544_0.4521074144804138"},"_hasShrinkwrap":false},"0.26.0-beta.4":{"name":"reskript","version":"0.26.0-beta.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^2.5.1","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.1","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.2.0","less":"^3.11.1","is-dark-mode":"^1.1.2","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^6.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","react-monaco-editor":"^0.35.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^5.4.0","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\nCHANGE:\n0.25.17 之后\n\n1. 不再支持相对路径的src目录参数，resolve src只是cwd下面的src目录。影响是：只可以在eefe root目录级别运行skr test，才能正确resolve @/ 到 src/ 下面\n\n2. 添加了根据项目里的jest.config.js来配置jest的能力。\n- 如果项目中有jest.config.js，需要指定reskript/config/jest-react.js的**相对路径**（根据当前项目）来引入skr test的默认配置。例如：'./node_modules/reskript/config/jest-react.js'。 如果使用require.resolve('reskript/config/jest-react.js')，需要变成相对目录，`'./' + path.relative('', require.resolve('reskript/config/jest-react.js'))`， 前面的 `./` 是需要的。\n如果是react，引用`jest-react.js`，如果是node，引用`jest-node.js`。\n- 如果项目中没有jest.config.js，skr test会用默认配置（与preset相同）\n**注意**： 如果用了jest.config.js，settings下面的test值将不起作用。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"601ead03a38d744af30e58e9dd9fc924bac2ac2a","_id":"reskript@0.26.0-beta.4","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-dGUdew41PRkO2TB6QL2O1pPsad3EU/hTUYLw+0VIL/ES2hsJynmMnueUSSbpP1SdfcRp3HdMa81mKkQ+0LNQVg==","shasum":"d28fb0b34a2b4fc39bdf8eade3918133902bd117","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.4.tgz","fileCount":279,"unpackedSize":390314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegEsSCRA9TVsSAnZWagAAt4AQAIYRNdxnugkEOfjCBS6Y\nynTcaLiFZ5MoCZ4Awe+KSXu00i6BwVtyZti1l0b6kEBXsao2bHubzOlIp88k\nLDGSOkeS8iQWQJV0FkLnmkaC2E0zESw5Clvu+6Cjg/iqLEPmgGb7d2RDa818\npdEkJKZWYVrsGC75fJTCqJa6sFm6EaXcG3YE4kf2p8ZLfgauzxUhjTEqx+gu\nTpav3HdhnYrXOXvPQjHUr1N97SCDCK10dXLANTVxUoXK4E78lhCL6pPP1twN\nDCO9Txbkn5Se7bpoBrufUttfkZ2+J8GBY5mnGQOghAvcMQ6bMzZfIDinxnAq\nM/u/7Um9jGi4O/GD1/dKelyQK1RpX7KPxq85RfHEhPOWBD0qn/N+H07PSVXK\np19Asgha7SkzAopYxT3tmLlslExbwY8RP3vRcHLX+/BKHYSow+g8jqb27Fdp\nXcEzkjjn3/+bVTeCYdkQkuAY2KUI21FpZSQuzw9/aMdZMyLtOVkCJn+tNOiA\nz32df/DntnA3qpWq9d37yk7GSIjdPD/m+hh1su3oMpUJO2+XPT24/8AsF/BI\nKaYTswem3w0byujBqo0U5eCRg66KQ2ywXBcs8c1QsnbjeEWIHMvSoAJ9rvrq\nESPu25GVEtiZ0nD/PDNudGWGU0+A89V8ynWBJLlZM0U+BYVI5dC0OZAqA/F3\nepBN\r\n=TGl4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTFKm5xXjEzhBtMEazINEqnUZYNAQRVDEASAEAg00TyQIhAP67goJUIvQsiE9LM0/+FYOs0+2UCrjwUtmOuUkUcxZR"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.4_1585466129342_0.822766102113234"},"_hasShrinkwrap":false},"0.26.0-beta.5":{"name":"reskript","version":"0.26.0-beta.5","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^2.5.1","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.1","http-proxy-agent":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.2.0","less":"^3.11.1","is-dark-mode":"^1.1.2","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.19.3","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^6.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","react-monaco-editor":"^0.35.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^5.4.0","@types/rimraf":"^2.0.3","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\nCHANGE:\n0.25.17 之后\n\n1. 不再支持相对路径的src目录参数，resolve src只是cwd下面的src目录。影响是：只可以在eefe root目录级别运行skr test，才能正确resolve @/ 到 src/ 下面\n\n2. 添加了根据项目里的jest.config.js来配置jest的能力。\n- 如果项目中有jest.config.js，需要指定reskript/config/jest-react.js的**相对路径**（根据当前项目）来引入skr test的默认配置。例如：'./node_modules/reskript/config/jest-react.js'。 如果使用require.resolve('reskript/config/jest-react.js')，需要变成相对目录，`'./' + path.relative('', require.resolve('reskript/config/jest-react.js'))`， 前面的 `./` 是需要的。\n如果是react，引用`jest-react.js`，如果是node，引用`jest-node.js`。\n- 如果项目中没有jest.config.js，skr test会用默认配置（与preset相同）\n**注意**： 如果用了jest.config.js，settings下面的test值将不起作用。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"c00c9f7fd7729ce129dd34099e0f70767bc2854f","_id":"reskript@0.26.0-beta.5","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-6gO9013VXQnPOb9Bx88uymrbquU5zLmK8wPN/+UKh42sZO0460V1OrM8jppsdpKwuYXG9sOa4WvlgQlTO1/Q7Q==","shasum":"60a774509584eab8109b4e2365f7b9ce70144eaa","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.5.tgz","fileCount":279,"unpackedSize":390329,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegFHeCRA9TVsSAnZWagAADfYP/0sQhzOTJ7ryh/xLEG1C\nfGYsrPiXI8HrHqjyt79719IZIG4740sZl5qel4duGIx0ePUIFeiMp3TCZLiT\nbfnJjvT/ePFHFblXGfNDGsuAQKtXMhEBeQFg9FGMAHfHMtX+dDBLPUNWXk7/\nB8fhrM4vYsIiBKnK1/7RUkkhF3YoGdGs6Fdzq1PtWzYgZYUlmKDJrbEWZFZD\ntcAFpQjzVe588jM4ntLvZmo2Jah3KwC/lJSGOKgg2Hk4wiuhlpRTbYqFvkiB\ncDkuthNZSuA+aJwAZgfFQu5qlh8lrZIlje0WsFqWXYY8ZE9nbPZJFMwNethz\n6B4Vn5NUMJ9Zrd3w75422lTC0+HiySJd211SIC/HnoUfpE0X/Ojhdd+zris0\nWskw2XBrYBnXm64c6rnqBTuchJNRN9Ef363jAi9rEW3fwEUuNsjliuhePued\nvp8eD+h2EJHaWsqbQ51HWFW4OseqLRfAQ3CUMMCChS1fNPzE+IfQa5kDouJD\nGwmnadeA28aZrg5b/o6uD26cIo+onlYb2l2DNU385NVLssvDmjLzdx9PIcXo\ny0R4Fv1JfkR9Ke/3LEuaM0ceI9dCHrPsWtg+qJ71Kirb35WRId0hEjV2xTBa\nJtoGRbXl+KJSUFfY05vJrOiM7mt9QRTIuIzrlS496Afi/jJur0V0vYm8tKbN\npVIY\r\n=PIHG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHFE/UahhvfSwG2Eft8xGei47V/U3NBOMn0euyAis9ObAiEAvExkX7UTGb2TBPFiEoXQEwstKM1Q9sDRrw2ydCjvIus="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.5_1585467869889_0.4353362492707402"},"_hasShrinkwrap":false},"0.25.19":{"name":"reskript","version":"0.25.19","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^2.5.1","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.35.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.3","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.9.3","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"7e139413f3d0d7cf243855f20ee6a30d13cee69b","_id":"reskript@0.25.19","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-2W5Bl2GfhbbQWycKW9VBHohNbN6OYvR7Bd0HRfEPtyPOEddRaFQGlmRgzyp9iT6/fC8VAIet+1BR9efoN+rq9Q==","shasum":"4a019264736685ecfe7e720198451c4d91666c03","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.19.tgz","fileCount":275,"unpackedSize":314427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejutICRA9TVsSAnZWagAAD04P/3ChkuJkspGLZ5rIfkYp\na562RUEKXPSiZYTD+XtxY88b4j30zXU1lK5qB5AVQn/6uzGBfM4Lb/41zYEp\nj13OsbGHRfrqkH+hxAEN1XrVSj5W4xeqZpbQZlmN5Txbhs0/PwN9OfbQAIjX\nLZo6CxxchJjRzJkD1kOf0haQJ+skp8mS0iw9rlXWSm4nxc/2YUPYLLnXp3+T\nobWwdh0wUo80LFcibtth0e+YUCZ0frLPkxpIFPe73vl2UnltKBNKBEU44XCh\nulXAfK5A+TrAQ14ty4JP7U3LB+4X/0IOk2wv6K+92Evn1DzSv5ISG0TobvFp\nxHitaXrUm/MwyPZiwOUNWZ/SJdS1dDM7ygXwvjnERDadSdzrVv5dABpjDASj\nBDkawfLjvQlD8OFiC7Cr4Rg2gnc3lZhhF6TaXmqyvUgsGTXzLQtzOxcdzy3N\nwYUmOwXOeoHbarUnnhEZGADyZWObqovRzP06fxTEroTTH/M0w9/mJOL9+ULA\nrv/XbBfSKQNeSFB2Hv4EIUKzc8jXLITCGRgFgmEFCPkGph+uHd59B2niTAjQ\nUJmw/DnTK2m3CXdRGQV+MGHdx4wD1ybkinmcUIZen17AYO/vY1j3riCcIeQs\n9Pv8/VEVk4qsCA2O3izRF18dSCol0hfxx/FKvjH8bkINfERubjLLYMk5M9c7\nWDFJ\r\n=wK8a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF7us965DpLSiSuLHjnpmFD1lxW9hUmkKby429kDrNyBAiB/cT0jNHYfrE227xNUk1Bh82iRfC3H4LgK0LNXT6vHnw=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.19_1586424647722_0.5424430666854498"},"_hasShrinkwrap":false},"0.26.0-beta.6":{"name":"reskript","version":"0.26.0-beta.6","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","is-dark-mode":"^1.1.2","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^7.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/babel__traverse":"^7.0.10","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^6.0.1","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"gitHead":"e9b7464d4133def73b245e160d267de07cf67b2d","_id":"reskript@0.26.0-beta.6","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-NpfsRVeMJfkF2a+U++tOT3BKBiLHTBpRZQ5mAs/Px4I/tQkv6K/7WsWp40Gg88r7/GRqOfWg13pZLhv5eoqG1g==","shasum":"2adbbb04783b0004190f6e4d4cfa150c76b50ae4","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.6.tgz","fileCount":279,"unpackedSize":392182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekDavCRA9TVsSAnZWagAAGlAQAJl3b9wGivTT9JYR35QA\ns6Qw8+40d5k9QHU3mmdMq0LDRnypZY/D4NoEy2CfdmFkJiF5WKFkDtKG7bVl\nGStvuml3sP8g5xI1QQj4iO5h5MS+x6pfHSiF+7Ms+LgXQwR5S00R+ljJ6s65\nZC4CYOy69d5pws6gncUhFe0/g8sjPl9jDIfu4w70t3mDJFlNh9/G9ITbU0Xs\nnWexvHy/GKH3KTwhIHxRbEOcasufYe+xTdQTm37sNIrlL0d1eO7eP4zdNhQO\nzi7RcRTQBPCILZ2Wf7Qthzi6T6NOvBIqlDDQF1I7BNYq1APHFaTgbx+ZzJYj\n1/lOoaBiaLp6B9bvG9gt6YWABQbtEWFItWyssSIbjPFj6b6NZ0rqU1JaX9Vy\nHpe72V3TQmnRaI8ZA8knoiHzXGDIwl+AgvYQEzPgMyks0IKE/5uy05xoS1Jb\ntoJWNJgzZL9MGCf3rlqvWIlX3htNZEvbEBEfDKY5aXSjrGIA1iq18ZjIWK82\nG+flyBJCQsp433FLWehKsFYFvT9iPumP5VEn+DQsJyXhjZK1h9gabbHm/FM6\nvi5U9zhQHDooaJpmLgbGh89uHZWjuEe+N2X+kuCqsruGD64t0n5XSuZkvhFe\nzDajJBMqjzCKgMlY9aesb1BnyvEBiB8JR1/siN+SjfGsY8YZmBQRMJ+uPsld\ndIGe\r\n=TBUG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQJUghx5CM9wP+YPIhPg+hJ9DOJZ9fYLwIaS8YZwQufAiBJZNLHZowu/DP5JJPyMwBh564y9Iu/J+QXSQyLVSKV7Q=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.6_1586509486367_0.6871084919993078"},"_hasShrinkwrap":false},"0.25.20":{"name":"reskript","version":"0.25.20","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^2.5.1","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.35.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.3","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.9.3","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"4b4f1a95280aa23ed77204826c4ffdf8db7623b1","_id":"reskript@0.25.20","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-oW+hswUVP36Bd9oNU3vjmKxn4nP1Nz2u/VRpyhYIpcv6Munt7YEkzW+Dtcy+B2w+NTz27qNKoGSfPrgvYY9XLw==","shasum":"d02e76833ad00dec460f286743a4829285b64b25","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.20.tgz","fileCount":275,"unpackedSize":314427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekE4hCRA9TVsSAnZWagAAUQ0P+gPa2SF2vujHUj9EBuKl\nnsk2+0MOK9UqVrVrAToHXoM2klX/tNenUr4e/Zol3nKZoypMriKCCnO7bqwA\naxHn0uz0rDpdurBNHSCenHM7ximvk1vxoK/9mVdIuTPkcz0PJa72KfYJvubd\nMYGi1ZFm+bjL9VqYi3ML4BjcVmM3l7Zgn7HT48e3EOyB7naYQBqJDWYyRZL+\nTY08ZrR0Guu3l2MKgK1k0gqdQ+kruv+XmJFDTRmpWIMuvElB9T0fZ6uehnc7\nIjXRHk2yiGCvWB7JXyO7epUUUlndzBh1B4xlAd7NCicSScw77iIwKGRzrBp9\n232s5EYe/L0WwahlnxZMIM6n4DDa8TC5XseQAO7A/vDUHIjV2Jw06Xci/0n4\nzQ9i2DmYxha8JSC5NksDUO+OFfzig5TInseUT4osEeC/MPUuk7ldlogHEuqm\nv5n9F5p0cnptZku4JFoo3oHrmjr5urfuGei/oVhiJk7RP28fo/wp25zm/m5R\no+L0v8IZ5E3FuoiP8Qr2tW59WnH6QSAiprgdd5dXl86WjcH8/0S39SQHDeQE\nR+zHmLa8mTJ6P4xygUqS3QbAdgaxrDTVMFKrnTZdYLn9kBpcV39JeCuyLLfO\nWCykSY7M4gL1HEHxjq7P4dXB+sJqkFeV4pL/8nu1mq+ptH5TuCDyOX4eiVvp\n0/VT\r\n=pZfl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhuUw5eOA1gcCSZc7MEwjhDKRfshTO1os+CHpTvuDAvwIhAMbMsCvtcd3xTpl4ebSTcL81vrASte+RFqKh0ZILv/SX"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.20_1586515489074_0.8144450481438679"},"_hasShrinkwrap":false},"0.26.0-beta.8":{"name":"reskript","version":"0.26.0-beta.8","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","is-dark-mode":"^1.1.2","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^7.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/babel__traverse":"^7.0.10","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^6.0.1","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\nCHANGE:\n0.25.17 之后\n\n1. 不再支持相对路径的src目录参数，resolve src只是cwd下面的src目录。影响是：只可以在eefe root目录级别运行skr test，才能正确resolve @/ 到 src/ 下面\n\n2. 添加了根据项目里的jest.config.js来配置jest的能力。\n- 如果项目中有jest.config.js，需要指定reskript/config/jest-react.js的**相对路径**（根据当前项目）来引入skr test的默认配置。例如：'./node_modules/reskript/config/jest-react.js'。 如果使用require.resolve('reskript/config/jest-react.js')，需要变成相对目录，`'./' + path.relative('', require.resolve('reskript/config/jest-react.js'))`， 前面的 `./` 是需要的。\n如果是react，引用`jest-react.js`，如果是node，引用`jest-node.js`。\n- 如果项目中没有jest.config.js，skr test会用默认配置（与preset相同）\n**注意**： 如果用了jest.config.js，settings下面的test值将不起作用。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"e9b7464d4133def73b245e160d267de07cf67b2d","_id":"reskript@0.26.0-beta.8","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-yoGrA7aoNfq87K07/VxF3pW8UlBOhYQ/KZf0tJKhatgRwctgA3HL5IGlKFqR5AvDhnA4VwJcQNd7Z+bT8NmZTw==","shasum":"6f181130c65a218506b49d018bd7f47bbc143a7a","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.8.tgz","fileCount":279,"unpackedSize":392182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekE6XCRA9TVsSAnZWagAAE34P/0cP8HwduHzVHhULBsSi\neN4odlWOSGNYQm7jvUIdZS4shSpL4jBhtu7axEZHvB7im68xvcPwkSIJrjzv\nApW+Y+NMbSC45FFhm7HCoWCTdXIOjHSDuRgKw78wbqxXd+G02/PF5ly82Yu6\nIjUuAvC/8XfPuyOfwC4ivofhKKW0KxPE91wo4DYHdLdJ+2K4PatXCW5nvHUD\nzJ3oTn1xMKvCDVpSq33HuhJKGVv0Yx59M12NyMiJ9h9ugGJ9TVGEwU0pEbGk\nOGXWUtIfz5NvEINb+TBpxs6ywGq8CZElxmvamb+9Ix4lGf5t+0MJ/q+m0sA9\nguWuBbe3K5JfFMXPeBmcST4ecrsYQXvYwTXCL9TeKpdhxVFRTZzdB7EMtOIh\ngKCZ9HK162iglQ/CMGyik9caVlyQnA8pdYXgR82YXg2mNI2bCygcQcPS0DYq\nySdzmXOQyubmw+crQc+zo5Og1AxZ72XfYWCw14OP6PXzLNdUA+nQM4IYek8Z\nJz5dvyzkt35o3qMD5HauUVjUs6WwsQWn9QlExnDfdh4cYqUtj6O5MGgBkw3j\nq1m0xxBn6RTjQJ+1gNvV1yzNjCCzqRnNpMlGHymCiJY7BF5m9YjeVrBlJMF4\ndVvkh69QFDOKaABkGF/tOMpZGISvjj13KpKrF+sBKopDeZVzWcQg26I7W+tS\nWfcs\r\n=vl2n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHrviZ8DNoBn1Xc2NEGjX2JZpG9jzlBAe7BoG9vytfoiAiA5iyIjK/zugMmokbBmn9QlnvoR/DnggEPq2ZhJ9KqQwg=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.8_1586515607090_0.031342674587045094"},"_hasShrinkwrap":false},"0.26.0-beta.9":{"name":"reskript","version":"0.26.0-beta.9","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","is-dark-mode":"^1.1.2","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^7.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/babel__traverse":"^7.0.10","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^6.0.1","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\nCHANGE:\n0.25.17 之后\n\n1. 不再支持相对路径的src目录参数，resolve src只是cwd下面的src目录。影响是：只可以在eefe root目录级别运行skr test，才能正确resolve @/ 到 src/ 下面\n\n2. 添加了根据项目里的jest.config.js来配置jest的能力。\n- 如果项目中有jest.config.js，需要指定reskript/config/jest-react.js的**相对路径**（根据当前项目）来引入skr test的默认配置。例如：'./node_modules/reskript/config/jest-react.js'。 如果使用require.resolve('reskript/config/jest-react.js')，需要变成相对目录，`'./' + path.relative('', require.resolve('reskript/config/jest-react.js'))`， 前面的 `./` 是需要的。\n如果是react，引用`jest-react.js`，如果是node，引用`jest-node.js`。\n- 如果项目中没有jest.config.js，skr test会用默认配置（与preset相同）\n**注意**： 如果用了jest.config.js，settings下面的test值将不起作用。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"ebc2e368659f2e2fda8864e3ed7acbed385e5f76","_id":"reskript@0.26.0-beta.9","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-xRMKqOqYiIk7CZTpD4TJIBhrWLBfyijpI+BslNP/k1QbqJOFsmqp4itcT4HrF+5amAQWV7T4tnZ2cgEfdw8vyA==","shasum":"c6fc4f80f5212b29bd6b87c8d219df752a3cc6de","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.9.tgz","fileCount":277,"unpackedSize":385960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekr8nCRA9TVsSAnZWagAAplYP/1UlSiB05oNpKKrik9Kn\nM+yYTMddcLCoGZ6MgiHGoNdlBXvKThFQcXUJr/q9VXqaOtb/1jJiN3BSrYjx\nk2mNzPaXKrGwpWKDhTCcxI1G7qfoqsZtX2idGYpQiAOGJAdRI4BOpvwLQfea\nQG94UpE9Kh2rVxv0LTWIhDnvMwxGFeyZ/GUwW6NeCzFyNT2iC/Qndj/CMyDl\nkiigXd/2l1SlbYjwLdx448BhTufY7wMU5uCG5tNHIMd4+wnNmJ2bvhjLJTPc\n/IrhWtSUXeEqwUufz7JU5WTatTAIvI+evRfbwpSFSx3tMYyaRY+8GXIson3l\n3vAq6wA3WWi3w2kT5x9eadqqLvaKME48UyYYGqfQ8es6MW06Tt+UlHyRv2QV\nNcTuEv928Qn80gDU6cFqbC2g6Vl2cyuEzRg2gSG3Y6iyLkvTh6rlOObmalQo\nRHGSoOwLJip2R+jMgVHkXDZS46gOYhQc1nQwgruc6BvM/x2+O0ftp06U+Byk\nxL71QcGP3+84HZiID35o/J/wA2utLT1CNVDhZs3hAf2Cd+vb/Oe8Iw/RhXe7\nGBEUBw/DiYGsADdLhPQQdbkkQVWXTbIqCl+nbvffYx/AqYYo7D0nEbElayVQ\nwMlcvsppUzlCAcsgnszYRbFX2Rtkz8NlsMK3OvAkXTwDemsEJXm5L6APdmf0\nHs44\r\n=3EAq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuuLzVFWpnzD/SIrkUOtqvOaYeClh11bnG7zaQFIdVrgIhAJ6VUCPQoxI29eh8VndkhXdhBFdDLyjTxaMeJHSy3liV"}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.9_1586675495318_0.9036501797914556"},"_hasShrinkwrap":false},"0.26.0-beta.10":{"name":"reskript","version":"0.26.0-beta.10","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","is-dark-mode":"^1.1.2","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^7.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/babel__traverse":"^7.0.10","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^6.0.1","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"gitHead":"ebc2e368659f2e2fda8864e3ed7acbed385e5f76","_id":"reskript@0.26.0-beta.10","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-f9Y7x2WCQqOxob309kQ2ouN5z4TisuiPtTbhHbz5Y5oAIsEyBY6JEE6tq5Jdn1eRkwainG1JgN6dsf6X/rMe4g==","shasum":"2f01e726064683d278e01f855c1dd8e9d32dfb2a","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.10.tgz","fileCount":277,"unpackedSize":386430,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelB7gCRA9TVsSAnZWagAAeb0P/37y0LoxvocsomnzR7rX\n7vdDJpXBtHgT7wzHs+DISfi47TQyRIHA0tdTlx5SRsj1g0mpskq9p2z4Cy6Y\noiIfMzKg47Lp4ypUcR/0EPVQeS58m3QW1GQ1HOJ+mAcEAo2M2WtmoZdrlb2k\ns9RRNNngilVltxTpk4mpry+Ub1PnFEDBGvvSHmR6mnIKbzRdaFv3RWVRVs+L\nnQbz6LCpMAcCM5tDi4qJojdylysBBDcguu7yBesV3wwpNDvK+bgCyAKzffun\nDQ+/pSuUMOSDjprLq0pT70kZZNEjhxSpfwX7aruMbI+OgGmO6I4ZplB3rVeR\nn4eiQCleJTKn7W6Dn5ZEOl24hDMs2wYRlzv4xWPh/Tx6kRqBbRtzqceI3zAb\ncapjX7z8ZRd3WsDW8Ux0ohte4enc/YgDvXXFyj3lggTMni9qAGou6noxzaoW\nJ1PuGodcmKU7hrtT4UgAw0M8D+jO6aBTSEIO8OHIXz/5uimesw95c7Pq/rc8\nAnHbgAzrOSMFPNo4yjPjTuWmxinXuKTMv5GVBLWD9NZv6uNI2/c70MoaKhiQ\nQU5RmWT/KADZfvw2iTkNWBIAHi6g2llGriV0OPSzwkRq9N2aY57RnHHzYn6w\nwbHveo7Y2DcBgcBEHqfEyML0btKrsCBNyrQoBwHHk2Nv2QxWj1FYA3A4LjGs\nmsAu\r\n=Zp0g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF2Cg10CJNu0zzLvDL72rjBHfGjHYW8h06K62+T9DgheAiBOXDvB6drT/gy/9zC7WssB9ag3kqIaQK5niQq46bxsRA=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.10_1586765535651_0.8422665336105724"},"_hasShrinkwrap":false},"0.26.0-beta.11":{"name":"reskript","version":"0.26.0-beta.11","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","is-dark-mode":"^1.1.2","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^7.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/babel__traverse":"^7.0.10","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^6.0.1","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\nCHANGE:\n0.25.17 之后\n\n1. 不再支持相对路径的src目录参数，resolve src只是cwd下面的src目录。影响是：只可以在eefe root目录级别运行skr test，才能正确resolve @/ 到 src/ 下面\n\n2. 添加了根据项目里的jest.config.js来配置jest的能力。\n- 如果项目中有jest.config.js，需要指定reskript/config/jest-react.js的**相对路径**（根据当前项目）来引入skr test的默认配置。例如：'./node_modules/reskript/config/jest-react.js'。 如果使用require.resolve('reskript/config/jest-react.js')，需要变成相对目录，`'./' + path.relative('', require.resolve('reskript/config/jest-react.js'))`， 前面的 `./` 是需要的。\n如果是react，引用`jest-react.js`，如果是node，引用`jest-node.js`。\n- 如果项目中没有jest.config.js，skr test会用默认配置（与preset相同）\n**注意**： 如果用了jest.config.js，settings下面的test值将不起作用。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"ebc2e368659f2e2fda8864e3ed7acbed385e5f76","_id":"reskript@0.26.0-beta.11","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-dYrc39ITidsmfzwm9jEUGg77+31jJ/SptT7V3agTfvoL/GOwI04qg+lq4p6u4REO0Ms7wiA/XCPLk/C0Imx02g==","shasum":"f1476a1ac85da65eeb39fb5b4662f3503e171ded","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.11.tgz","fileCount":277,"unpackedSize":386430,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelCLACRA9TVsSAnZWagAAnvcP/2puXoNpxi9l8QFVDARg\nXVOHYlzxATypJZdpzzJsqd4q4pyk4D88bTPALBFhU6NLf6JN9uQs3WtUOSXb\neid21VxDI0yGUucGZ5+c8t/3JtDqrfDGvmcsCTtk7QIOOdwZQcCFC3v3+mVa\nbyyKxXs0Lm/g7vQUIqB0rPOAyGOqrVcAwQKtxB+IozyIeeZZiVd1RFpFDkt9\nsOu8rs9sgcsE8hhhKwhFkD+mVVfDKFQmYoOJhrQsLGpHm56A4lumL5aoGZAK\nZhrmI7Y33AdDITY+5nMLZuMsd+j9V2bllqDkOkDNZ75aoraBpqrbv98uYi6P\nhDm4/DVj/wFp2PFZm8fVLOkY+wtGKZ66yCp9vLwNjqWloNVzplR6rXFG+u75\nwU6STedMyCd6NBXUjwCfAa5ql5QaW+Ct2xHZja/9A/S7ycHxry1vv/HiT+d2\n9CGNg6quOU2zKvgxd8mpyrbnOJDFHOtOm0CN7l1KhRZM62e9piFFsiPpubNx\nNk0vFyiihRByOgEqqWBZH/7yZjqQ7SJyKU4NaTe0pS9rmz/TTnxMmQAfbNEg\nkDy+HtRS4luE5uugT8mqRDh1stU6y8o/dP0mPRTeuJlRa6+sweZnfUizwPO6\n+eunHXzANk/2tiRcUTM50dJLxoJWnKNmCG6ZQX44iZx/73uxGTvskNTobu+w\nGoaf\r\n=B0O2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICRFAC0LoXGOLaQ3c9EvOwSG5Gs6h0Hgo1h0fOmuz0fLAiBc5zrc5m6xYyaKJlBIXs/a9ZoammPa/NGV2NrjXsUyUw=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.11_1586766528316_0.032551259042351344"},"_hasShrinkwrap":false},"0.25.21":{"name":"reskript","version":"0.25.21","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^2.5.1","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.35.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.3","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.9.3","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"7e139413f3d0d7cf243855f20ee6a30d13cee69b","_id":"reskript@0.25.21","_nodeVersion":"13.11.0","_npmVersion":"6.13.7","dist":{"integrity":"sha512-LP2OukuNKs5NwHFJFyVWN8IKWkyo9f8N0BMVhl5NSiqcEBVjAlhxWe3AdkwiOIO6ovndREA2T3SJ5AGWuQlgUw==","shasum":"8302d3eed3ea8e26130986e63639a1305c11a837","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.21.tgz","fileCount":275,"unpackedSize":314427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelCZaCRA9TVsSAnZWagAAlnkQAI3CMgMDfBmjHdnTUnpt\nKh7+tB4siX7La3+UcwnS61ixLXoGTcs2E0/EoMHTvulF/wjRTkYC0+3LD0ut\nh/xNujsMsun/KrKUMWXWJ1ZG/aupEOU0MXDcOHTeSMe1BTs96VVjpcLZkunD\nYkxuOSwN8qVm8flQxdgmW73eitS9CmtQB5uaZUwxC6Ib5TuH8DOzjamg34V2\nGrjrR/4/Gf3OmwVPcIofdvwduLTtR4VF7HCpIXtva8WjYA6Cs+zhLxU3mXdH\nQZRbjPpifDpFNr6DPz6uSqmyC2U7fWJ3CDK79BoDp89U/3SW3GTtmvsLE5gC\nsxC346bUBwLi3AgMctxhOn0LEoDr/ZAtOxYXbgsvuoChLVmjhNUI1E7RUjw7\nTXc67kGiJMF5Yr7kV21FGe/9R/a6APxYltcRkzR+HoVYOvttvWnM2MvXZTp1\n+wEIOi9iLImU9HuLNYneKfCVY5IkRNvtUwWGh5gS1bLe7DAGrE10sWxsFt/c\npN8uCRgXsnhjYH9vxE0Gnk0/uIdj6vHIoEI51x/aDH8ZbVZR8Wpo9AHlH/i6\n15vKn2jCGJ52Sv48adIWmhPwjGIG/gdF/FAZQ/nLp5hotDj1IKlML8P1VOrP\naQdHlTn3QPizmpIq9ke8TT9uFUIE5625QkL+4VAFuNCL6d1PGjE1jdF3uiCZ\nPGkT\r\n=DELL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHnVVJpov5+E1JumC6RhzFhDIsZHmy4+pkhO9XiKWQ6PAiEAhK4bK3wu9QOYwqRVhailIXpOeJX+fO6trdM3urd4zz8="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.21_1586767449827_0.8227494727931619"},"_hasShrinkwrap":false},"0.26.0-beta.12":{"name":"reskript","version":"0.26.0-beta.12","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","is-dark-mode":"^1.1.2","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^7.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/babel__traverse":"^7.0.10","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^6.0.1","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\nCHANGE:\n0.25.17 之后\n\n1. 不再支持相对路径的src目录参数，resolve src只是cwd下面的src目录。影响是：只可以在eefe root目录级别运行skr test，才能正确resolve @/ 到 src/ 下面\n\n2. 添加了根据项目里的jest.config.js来配置jest的能力。\n- 如果项目中有jest.config.js，需要指定reskript/config/jest-react.js的**相对路径**（根据当前项目）来引入skr test的默认配置。例如：'./node_modules/reskript/config/jest-react.js'。 如果使用require.resolve('reskript/config/jest-react.js')，需要变成相对目录，`'./' + path.relative('', require.resolve('reskript/config/jest-react.js'))`， 前面的 `./` 是需要的。\n如果是react，引用`jest-react.js`，如果是node，引用`jest-node.js`。\n- 如果项目中没有jest.config.js，skr test会用默认配置（与preset相同）\n**注意**： 如果用了jest.config.js，settings下面的test值将不起作用。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"c1a6169a7f51559f00428e76df7c1ffa9651934e","_id":"reskript@0.26.0-beta.12","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Du+vjvTvGMheEBybOwi+FdNYInJYh2yy3Iy/t0JbMuIjws3zNUJS4ZqIdQ0RqCCV9smKLLEi8hKbcVJbGtuEMg==","shasum":"1f107b85647ab66a616cd3bb8bafc5462ac953e1","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.12.tgz","fileCount":277,"unpackedSize":386748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelVz/CRA9TVsSAnZWagAAvCAQAJWYWLD4uxWCNeAYiFpf\nDqZnnFoU2yOOcBdXq6y1RmELAPSOkaVTZJd5DWrWq7nBAb/G6w3tQtFcCOks\ncneVIG6JZBkLnaUi0+vfrsI+mQnlR+xDKHsHI+q+RUob1/ZolmmgPpzn3s7U\nil2uIgq12KbPGvqIzS2dfKLfdrW4GYnGcuOfG465l1XcDqyroYQrWRjSQJk2\nNx8is8hM3uIuxaDXBVG6nQmBKSNukNFOKTfWAflsyxeCCaq8Jd0MewQuZ6Ao\nN2UO09qEhuqjALDsdWpeA8NhS4oMbS4lzCxmBiBXyfKC84SlD9tHOLYSikCW\nPlhcrHQnIl1WCidw9MIHUTzKUKnsIF8pWpUiXbX4ABqjpbAq89Q2Zu2xciJR\nN24kaWGPG5qtrphRlLzIVA+tZif9wwWKMIuTJTE3dFUGn+2iS7a5LVE8iB/S\nBaOhoqZGQ436KUYSPcKBA778j3r+E2jK9DMidEUec/Djov0S2L/311h59XKl\nYO5E/wgfxyeXO4qr60gu0nxSNoYd2Rn0Vu+ltBfE3NtQScb73M+8Uh2RX/ok\n5uGlzE/DB2Kpetu/DYRU54lG+9PyAygOxLaYPXuhLtCmN/1lAkeXnr2oDGub\nrKky/I0Gfi7swlY/FeECtVhIy0v+TlIKOpahHEMTG+FgLDE8AwdlGC8Ez02P\nZ2at\r\n=Afpw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID0pQOCf5eKwyCdCltVGfpTCiQGI4tITtER2p2tB4KsVAiEAxRjNro5mOCYFmJe+gQuIm4RaKChpPzskXjYzL0i91AQ="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.12_1586846974726_0.6886876314649013"},"_hasShrinkwrap":false},"0.26.0-beta.13":{"name":"reskript","version":"0.26.0-beta.13","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","is-dark-mode":"^1.1.2","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^7.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/babel__traverse":"^7.0.10","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^6.0.1","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\nCHANGE:\n0.25.17 之后\n\n1. 不再支持相对路径的src目录参数，resolve src只是cwd下面的src目录。影响是：只可以在eefe root目录级别运行skr test，才能正确resolve @/ 到 src/ 下面\n\n2. 添加了根据项目里的jest.config.js来配置jest的能力。\n- 如果项目中有jest.config.js，需要指定reskript/config/jest-react.js的**相对路径**（根据当前项目）来引入skr test的默认配置。例如：'./node_modules/reskript/config/jest-react.js'。 如果使用require.resolve('reskript/config/jest-react.js')，需要变成相对目录，`'./' + path.relative('', require.resolve('reskript/config/jest-react.js'))`， 前面的 `./` 是需要的。\n如果是react，引用`jest-react.js`，如果是node，引用`jest-node.js`。\n- 如果项目中没有jest.config.js，skr test会用默认配置（与preset相同）\n**注意**： 如果用了jest.config.js，settings下面的test值将不起作用。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"c1a6169a7f51559f00428e76df7c1ffa9651934e","_id":"reskript@0.26.0-beta.13","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-cWaMZ/z/H7RN8QuoCoancpPOUphynYmb/VKa64fCQJXO2okBklF1HCEQ+HB0CVtMoS0jy9VVLOZfFtyizJrqVQ==","shasum":"0d6f39c904ede970d98f5d0f984e782793230f5e","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.13.tgz","fileCount":277,"unpackedSize":386713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelWb0CRA9TVsSAnZWagAAtycQAIDijuJklUMf50ME+Zlk\nJlzZmg1s9cWRDkoUuSHpzxY0/qhYpQ/UmPqXzFQs5tc1YynlTi62xevGre1q\ngloSN+Ieerhc+l37ZOWOJnSBzY84rYnlz9vj12dDUOjreuvuSslVSp7hyLZ+\nT5s+fRXxNDzphqagufTnhmytfbcK35JuOsh3uHwVKVaISGkC8Dr/0IZIod3c\ndSbvnbuC6XV47i7f0eilJEfKPQl5x5/nTwvjqV70BjAXCLfOfGJMiQLBqEv6\n71aylj9PkG8sCdGAshrucG6VR4DYtBBrvT6+KWNi7ktflo9U1jZbTdM7oQHF\nJwQ1+QlmFo8PWLlqtsXukyIbg/OfbAYHhUptOmyhyGQNFiKc+RoRU8B3/V+y\ng9v+H/VMo8uYw1C/+1EKJjY58nMbOWEDA7MrB/j5Ps/6eDikBnjsG97z9+1Q\nmwwQHc/b/XQjol7+483eg3QjT07g0T2Ifqq/V2Idh3V1jRsghQ8A/GYAN+j6\nprQzYTmA3M6W25xHTWhuRjSj9pI2rN1cn07mZTB78Rh8W/JM6xlHG9Chx6PM\nY2gGmo1bCW3kBx7HaHhMbslT4k4xlr4X5H94DFVtXuF9XrD0OmA4WlspjQwz\nyPfaam6+l4jqJrLuMfHTq9MH053hBdjr/Bv9+P85c/JJDykBbq0NROSBcTJk\nnDKu\r\n=Hnkt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkAOwaiW9XpbvqROlu/HfE1CWsETsqWduBJSJebr9P4wIgcJgjt/bb86d3THg/17vbIail3M5uuSoE8oACXFLB7QY="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.13_1586849524112_0.38357673541803194"},"_hasShrinkwrap":false},"0.26.0-beta.14":{"name":"reskript","version":"0.26.0-beta.14","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","is-dark-mode":"^1.1.2","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.8.2","node-notifier":"^7.0.0","open":"^7.0.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.3","@types/babel__traverse":"^7.0.10","@types/enzyme":"^3.10.4","@types/enzyme-adapter-react-16":"^1.0.5","@types/eslint":"^6.1.4","@types/express":"^4.17.2","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.0","@types/node":"^13.1.8","@types/node-notifier":"^6.0.1","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.1"},"readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\nCHANGE:\n0.25.17 之后\n\n1. 不再支持相对路径的src目录参数，resolve src只是cwd下面的src目录。影响是：只可以在eefe root目录级别运行skr test，才能正确resolve @/ 到 src/ 下面\n\n2. 添加了根据项目里的jest.config.js来配置jest的能力。\n- 如果项目中有jest.config.js，需要指定reskript/config/jest-react.js的**相对路径**（根据当前项目）来引入skr test的默认配置。例如：'./node_modules/reskript/config/jest-react.js'。 如果使用require.resolve('reskript/config/jest-react.js')，需要变成相对目录，`'./' + path.relative('', require.resolve('reskript/config/jest-react.js'))`， 前面的 `./` 是需要的。\n如果是react，引用`jest-react.js`，如果是node，引用`jest-node.js`。\n- 如果项目中没有jest.config.js，skr test会用默认配置（与preset相同）\n**注意**： 如果用了jest.config.js，settings下面的test值将不起作用。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n**请不要根据`addition`中的`buildTarget`、`buildVersion`、`buildTime`等动态字段返回不同的配置**，根据动态字段返回不同配置会严重影响webpack缓存的正确性，用来作为分支判断的可用字段为：`usage`、`mode`、`cwd`、`srcDirectory`。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md","gitHead":"c1a6169a7f51559f00428e76df7c1ffa9651934e","_id":"reskript@0.26.0-beta.14","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-XzUyFsi3XsR7pbfbPZ7AmZWxR4qnx7J5RM66Fe6C4XTdsYywLEO/xBCJZ684qIUt13iyFVKMOjwdXrRXAKoaLA==","shasum":"a7253b6b1afc33fad372896824a43229b745fad7","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0-beta.14.tgz","fileCount":277,"unpackedSize":386748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelWq0CRA9TVsSAnZWagAA92wP/16TWTp66d3VfnH82jpO\nyZJADiByUKsc6Oc9pIVqgvg3rCC52fkdEkzCupqnVL4nSco0SA4xpBittyZa\no43eMqNUzHVx4WBa5+yXENcmEcwumHRJtfeueNx3FpnBHsaGqdNLHFrCgWY7\nOG8Tczvmdr1ZUfczxtFBSKwo6BCdlEP57ImAVeh2XQdx3c7UWiF0BmmlsMNq\nklCMifU8v0Davd4dUUyEtfBpiT1UvJhrASUP/xoavfUF/w8eR31ao3tNIH0C\nIfJjlEuZWk/6d16FxJcuhns71yTTirVBAmtmidaDjblpQMJ2vBQv52GF9dG9\noUaiitsNO7pjM43GmmgB7nOWviCdJIi0fG7RP+bARhlW6v5GWTC772oKrlCa\n8zFzjd+94enZA+AW3TrCExZDxhfcH62mJ1ELunsZHgFDL2ZOyep0Zf/ZeuHW\nPhS5woe/wI8kCZVH/tli/t9G97+e6jLqyCDYzVbuh2ZA5hu7R+0b6GrF0mnM\n/yFKBtyOw7n1fbrxt37ap+V15o3NIH+Ok8DL6bnvrf2D+LjIM7X/JCYkKPfg\nFzG/TeQBP19V1NkbnMK0QYY2eQt8kwDiWS6EPVbuBb5egfpxfDhOK80hE9Zh\nIarrCmtm/d90Oiq7+krRgv9E4mcfeIPhKLv1VoI0Xo+3/pB8vWGTFvcyjpnh\nJHSF\r\n=nxnv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1FHO+6mgiO/U1j8QcNzoFrLk11PcS3cADPZRkcYdOzgIgb3iCZ60FP8IGfyC4/dZxTfOTPIZ6KhZVCJqgjdv3Vhs="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0-beta.14_1586850483931_0.8191566050729602"},"_hasShrinkwrap":false},"0.25.22":{"name":"reskript","version":"0.25.22","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.0","@babel/types":"^7.9.0","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-json":"^4.0.2","@rollup/plugin-node-resolve":"^7.1.1","@rollup/plugin-replace":"^2.3.1","@sentry/node":"^5.15.0","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.25.0","@typescript-eslint/parser":"^2.25.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.5","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.2.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^3.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.0.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.4","css-loader":"^3.4.2","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^3.0.3","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^2.5.1","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.0.1","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.2.0","less":"^3.11.1","less-loader":"^5.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.3","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.2","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.35.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.15.1","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.26.0","san-update":"^2.1.0","semver":"^7.1.3","sort-package-json":"^1.40.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.1.3","style-resources-loader":"^1.3.3","stylelint":"^13.2.1","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.7","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.0.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.6.1","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.6","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.1.8","@types/express":"^4.17.3","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.1.4","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.149","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.9.3","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.8","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^2.6.0","husky":"^4.2.3"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.7"},"gitHead":"7e139413f3d0d7cf243855f20ee6a30d13cee69b","_id":"reskript@0.25.22","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-D0YIpda1my4pXreIu08n5JU+En++uiCMW8H+IdPFAxn2oJn5o6oHFwgUScRGL0tMH1Bdp/dw8rdrpdeR3qmrLA==","shasum":"68c6015b3ee878a47a209e7a14ae9f85a8f90d22","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.25.22.tgz","fileCount":275,"unpackedSize":314427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenVXPCRA9TVsSAnZWagAAU1wP/064Eb+73sS8dXS6H2Hp\nvN56TxBF/ZO4Ak6Kl+knJm3nBx3SstPOvvwzpHOTGnP7r6SaRrXYQQHTLobt\nC2+kF+cJTmtDSTeYWq11BWnh+ZLwFPMVL/6oL90kEhTb3ADel7bONK9Exose\nRktod6+1YAY4p1s43MqxW8/nW7pkE57040r3ZwAib1CRp7gZsHyMyJUp+8aO\nECmZRSZsiS9IOCtdryDyAOodk35N1LFcZeyUn/9vZWMVkihNFJjQFUAypTL9\nPMqThVfWYMU0PszD4yn3DMlRYV0zyxCqLZidDRMf+y67YrUuQgTFt2xdVDto\nEbPy69kCLquOmAA7A7co1Cxg8FAIiJyg2FvJhEPnP2CdgE0G1J5Yh2z+3yNj\ni6a/dKc1cR+2JtDDO9ERl7EhB2MesIWcSjrdcTRwkUFhyxWelNta3QbzqMgn\n/e/RbhGWFfwvCNxfh6UHY4UGcsGr1j587FmG3cpalE1by3C5WMTfeJn7+3MM\nwykU4OsdrToFwX3/BAJ03WGbB02IF/UqSu/bjRn8Kdetg/0t4iaSjIMo6pwk\nwe6iAHwU1UEVREihcbM0or+4+OEmI6YqbKlDLu7juCm2yc+/WdjVAr4IhWO4\nJLaKkdtqVyuxNXa6aAK6NxeNsCsQi1WCodKAp7G0Ajyz9hjTBAZQhHVmkFFa\naf1h\r\n=gSS0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG8pvxwQ84GNxhdlaBxyOGiWl4xNo2b4FsqrnSC6dAKDAiEAvLUOT0Am2yLRxZPP3jHPnGoDo7yd8pc1D2DQxTxEfMo="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.25.22_1587369422561_0.7672129198291333"},"_hasShrinkwrap":false},"0.26.0":{"name":"reskript","version":"0.26.0","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.5","@babel/types":"^7.9.5","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.2.0","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-json":"^4.0.3","@rollup/plugin-node-resolve":"^7.1.3","@rollup/plugin-replace":"^2.3.2","@sentry/node":"^5.15.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.29.0","@typescript-eslint/parser":"^2.29.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.6","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.4.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.5","css-loader":"^3.5.3","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.4.0","less":"^3.11.1","less-loader":"^6.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.4","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.5","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.17.0","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.3.2","sort-package-json":"1.41.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.2.0","style-resources-loader":"^1.3.3","stylelint":"^13.3.3","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.12","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.7.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.7","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.8.0","@types/express":"^4.17.6","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.2.1","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.150","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.13.2","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.12","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.5"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.12"},"gitHead":"9dd05f07e0ba6b7f1e9b16b4c0a2d35136b28fe6","_id":"reskript@0.26.0","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-UtxwnSI882wqFdENFMmQxwYL5vWDr7yakoN3bdRzHj6yxF7fB8q/ikfvx/X/HhG7Db4eeLSqPmbXZRNswz6GUQ==","shasum":"ccce3695b6cb1087d125581c872f45de3cc883ef","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.0.tgz","fileCount":275,"unpackedSize":314587,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJepTvyCRA9TVsSAnZWagAA8VgP/0GD9IqIJPSlWoe4IAVL\nnz3Uuw9KAhpz3NO4ElPyiSVljTPQGprcMGNUbKhWBf0cI/pRzbylBwKvdf7D\nDCSm58cqhQ1YpRdVqiuhqKvTHfWUAF6C6NLSoLnx3ATs+8+jHEwahCVPlBe+\neVXQDpugbQmDP9G+xXox73TyavBy8eayXv5vGm2jT9WDdr4kcBL9jq+/hHna\no9ONExswSEWZngYbCnQed5iywIGbVDagxcrKRTeFn8N0/hGYd1wac7OwsOVL\nnw3DGUz955/s8xcTfLeZPDqkc01hsSV/rPJ7U1eu6h9jAR9nRXZ7Orl1lA8C\nrig+A4T6G/xv6viZSUX7+J4Mj/ttZLf/Z8bn6ZzcDppRrlL06uyQBOrCHMH9\nnhN5XuxdsgFyrakHM3+OXgXOHSqkKLBkLOF6FOyHJI4uUMFn3Qx2GWgwSg1A\npn7I620AKoCEFWJ7IhRvEUMWAtxDBEG8Alh0UcoZos+xVv4AjTzqoCx4F54G\n1QSYyjZ1NT4G7BbYeugkJA+u2wOZyZhyObiZdoFEWum3svTh7nAvfddJkBna\nJrA/ScXSzathrwXfjP73aoB4pWWhF3C1/L9KPj+sX3IyojLTY3b98vBBoIbb\nSLbk8bmp08TAbH8QnJJBhb8DKHEacK/WjrRaD2jeGmvbJj+kW/zUmV4UiT2Z\nVsFC\r\n=hBWk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGtavZDZYfqFaNa/Snp+ew72UrMFGnW52IBvbQg2Pk/zAiEAr4SMZYeVN7d8KSuRWDQiuxoVSIxoVgd5sCfjRYLGvis="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.0_1587887089836_0.5986543102217534"},"_hasShrinkwrap":false},"0.26.1":{"name":"reskript","version":"0.26.1","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.5","@babel/types":"^7.9.5","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.3.0-beta.5","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-json":"^4.0.3","@rollup/plugin-node-resolve":"^7.1.3","@rollup/plugin-replace":"^2.3.2","@sentry/node":"^5.15.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.29.0","@typescript-eslint/parser":"^2.29.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.6","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.4.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.5","css-loader":"^3.5.3","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.4.0","less":"^3.11.1","less-loader":"^6.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.4","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.5","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.17.0","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.3.2","sort-package-json":"1.41.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.2.0","style-resources-loader":"^1.3.3","stylelint":"^13.3.3","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.12","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.7.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.7","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.8.0","@types/express":"^4.17.6","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.2.1","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.150","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.13.2","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.12","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.5"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.12"},"gitHead":"de07f6efe36f38f728ff328b9ba7c1ec3685f974","_id":"reskript@0.26.1","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-bCWVuxm3AVAqYU8o4jBsxDARDbOd5JIdoSfIP4yUqYWFq52VYCVLCM9lKIaQykwR38m+pMdtRoaLFx0007eOYw==","shasum":"cddb471318d3f1940289640d9237f0c08eb912de","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.1.tgz","fileCount":275,"unpackedSize":314738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeplDcCRA9TVsSAnZWagAASKUP/j64eROCX1bYaBuxNyk/\nvbfxBFMmueZXBT1EyY1QgtDSn0h517Eows8jklI2FuCVU0OI5TJNiEUqS4Vm\n1xF5AAdWLdY3C1OAXqedOYkTJvfThf4BG/UGXDzgO32DdkSodUsCmg0zAjMg\nwikRyfOrfyd2g+UHvKIG7vC6VoDDo8DbIUgi6uyZfWJ6usycoH7UINQZCuVf\n7VA14G1OYaY3CtU7VO8bsbdofOxHZ0X96kDzUfLZiao4FabenmdEUj8JD3Hr\ngVfSpRDAQEsts6FG5GjKj7wK+ksi6je2BcIcLKF6uH95HaBZfgWr0A6uJp+H\nNoZTzmOMrgDGj+gRlGGOSyzz6VjWflIMdOiLcDofsjayd7ZFuly/hNqyzoXH\nIEFwf2FRlw6dVFBPiGFtfR6Zu8yN4Pl2IKj2Zves+7k3cfTRgzW8Hm+Va3t/\nJy/86J5bOmvewOCSwn1K2RR8rxqNv8Z/0uwzeh1C4sby1dTA4ED+sKJ4Uetn\n4OEhwtAtg1u2NV6D0b6ATEQNaXq9W9W3rSJ5gJCD6xpXiJAhTwCDQBow25TW\nF8lKbiV8xI6GYdvFLXeuhPhY/kB0f9EiLU82JFSyOm75ZWUI/L4bkPzYMBJY\nGWH5vPhUmzDOQ8Gzqk/AB13t8Cpz8FEoL8IWZ6q0jo8R5Gx+3fTUQ+L+KbDm\nq/X8\r\n=YgOh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFQxMU8ll4AprVSE7QlKL085wpYC3izqPXMpyXkAJNlEAiEA59LRn56w/OwmfyxH4WrYAqylzgikHfK5WQ4uzpT3d84="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.1_1587957979510_0.25443756651095994"},"_hasShrinkwrap":false},"0.26.2":{"name":"reskript","version":"0.26.2","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.5","@babel/types":"^7.9.5","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.3.0-beta.5","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-json":"^4.0.3","@rollup/plugin-node-resolve":"^7.1.3","@rollup/plugin-replace":"^2.3.2","@sentry/node":"^5.15.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.29.0","@typescript-eslint/parser":"^2.29.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.6","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.4.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.5","css-loader":"^3.5.3","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.4.0","less":"3.9.x","less-loader":"^6.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.4","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.5","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.17.0","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.3.2","sort-package-json":"1.41.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.2.0","style-resources-loader":"^1.3.3","stylelint":"^13.3.3","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.12","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.7.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.7","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.8.0","@types/express":"^4.17.6","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.2.1","@types/jest-cli":"^24.3.0","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.150","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.13.2","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.12","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.5"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.12"},"gitHead":"33f9d09c349624c6a1b99a62048cee758160137c","_id":"reskript@0.26.2","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-h2GOLNuxVbRUER4bLzBm/5szDsi59bvKBVUhJj6LCskkAenSm7I2qe4eftnwSIAf97Inh+rzZRxXfr2qRJZpPA==","shasum":"944a92293d53c6710f5071a76c0cb3f27fdae92d","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.2.tgz","fileCount":275,"unpackedSize":314699,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4bpJCRA9TVsSAnZWagAAMeIP/img3kztI2e4JOmI/Ydd\nO+7NQau5fyDmGFswFeIb5zS4+/kDV+swkkxGVKSh2EDpcVMlFqVySkZPlCmu\nA0e9Ww5RhkENVbVlbjCo3BQXH28wqtMPH80LQ1fu5mAUSstKGu3tFURzyl7F\nueat6/O/ZSAxQfpbz2WNKVlHjArsLGAFxprkDoqvGYc/fxv1K8rUw996nkMF\nR1xRnYdHCxojTGGplLsZb/zHlbvvvKq4Ew3BbATakfH++0KV3thQqyVQAYhF\njKeJKzsfoYkscxpdGfkpQI0MsZtZPVQTtpZijRY0S3Li7UcruKUE5YVhMX8b\naY6pHJALTGJ8/neJ3Kg3DKvnbL8lPx5DdNdYE1zunQlKwcYqnWfv1p5okQim\n1yPvjSOlEk5x7fI1Vuc7jik9N2N9lZqLoZgUh4oGZOGtiAwm3l+0OPnhfVin\nelzhP+S0t+4cH2vB1kh7r/UyA0Urmmy2XSDuaIgc/GiA/OBRDVSdpMNrLQTX\n3cXdfg7BolDM82yUxYgPi+BI/jdlsg4UGKBGkUgDmuU1iddBPE5u5Wzqjb+z\n52O/e1TWPZ69ZZYY1hBH7Iw1DPApvwQdOamfh9pqOcKCe9MifyKiWFWpJIlH\nNMSqnNUYO0foKR743DpRoTEZFZhIN47EBrOoizMmYbftw/Ywe48DiGAmA45k\nP1W2\r\n=A58d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDcridVLk+B/0vzpa915WC7saMTYLHyCHHI+428iOWTXAiEA6B8cdRIltMBddNjtKQDOKGgaovZIdZVfUsijfDoChUs="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.2_1591851592681_0.9397813382248943"},"_hasShrinkwrap":false},"0.26.3":{"name":"reskript","version":"0.26.3","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.5","@babel/types":"^7.9.5","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.3.0-beta.5","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-json":"^4.0.3","@rollup/plugin-node-resolve":"^7.1.3","@rollup/plugin-replace":"^2.3.2","@sentry/node":"^5.15.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.29.0","@typescript-eslint/parser":"^2.29.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.6","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.4.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.5","css-loader":"^3.5.3","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.4.0","less":"3.9.x","less-loader":"^6.0.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.4","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.5","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.17.0","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.3.2","sort-package-json":"1.41.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.2.0","style-resources-loader":"^1.3.3","stylelint":"^13.3.3","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.12","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.7.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.7","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.8.0","@types/express":"^4.17.6","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.2.1","@types/jest-cli":"^24.3.0","@types/less":"^3.0.1","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.150","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.13.2","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.12","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.5"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.12"},"gitHead":"43c74eba0a8182065d57da4ce8f557c299d4ef4f","_id":"reskript@0.26.3","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-pyUsfIn2disqyFl8Cjl8fh4M5XTF1iI+xUKZ0W9bF8WGlFvWp9lD4vBJqMdXtOQwqUMSSd8RiPpc6rG0+oae6A==","shasum":"14152037c3dedbcd3e8035707f3cfc8f5f677655","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.3.tgz","fileCount":275,"unpackedSize":314855,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4by6CRA9TVsSAnZWagAA/TEP/2/7i40B1/YLrqy+6dvH\n9HEkkZ788SawPFy8p68/q5IyFY1KDkn/532aNPLsWxXGIT5s4ufK/QENf3hE\n29rUol8ddBLlGs7/mNFiPClhAkDf9S6Q1d5ENjERfl7RnTidkCQ599oMSLyb\nwK2QyAxHKLVTn+QR1zOK27IwWPwi7d9dS5l77CYAu7ubn2gW6RnS1JixZKRh\nkctNY+Bd839hhLEVyJWH+l/G7/f0guUtkfy//eKi521MyZQae/PG8UDy3S3S\nEXTC/qFxHpVjNEmnVt3rXMpOoRIEncp8ajHu3MfQIRpZykHiPF95xb+zRlUq\nzmLjfMpy6l8WBj8H2tHeQiwqnfNcdLzj4r8FMR8zI+lSoAQvV0fUVcD/ccnp\nSmesnAWT/bNISsXYwr8J235r4SQ9Gzrv/aG2snog2TVlSI5q9vjj9oxlZ62v\nMWTzC+IGRoUd5M2GNlIVXi2O/9M8RccRmQASZHKCyS0atx7BG9O3/x3/2KdV\nmY30+/5v1T50qru9Y+UYAtTLeNjOXQRb1BuA0qLGJP97dvgTcGrvf4aBg+wZ\ntIaXhmfH7wOTApwnnCJDgWj92aIU6EYDQtYa40yCbLNhaNOlQhc2oJaNImUL\nwoVq1rbUFlErB/zV4AfwqZwCsdzBmhtzO71ESRqxHCFPleXmo7csOLoGa2zl\nZO9l\r\n=to6n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCv2S5L4YNsgB9kzyWwo1TP4qWTPZZ7iWODaSLuP4M2wwIgd2JdpY11RPBOTz22wJKLFue3+3YhmDL5JrHa0t3HAFs="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.3_1591852218078_0.48464431313843237"},"_hasShrinkwrap":false},"0.26.4":{"name":"reskript","version":"0.26.4","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.5","@babel/types":"^7.9.5","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.3.0-beta.5","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-json":"^4.0.3","@rollup/plugin-node-resolve":"^7.1.3","@rollup/plugin-replace":"^2.3.2","@sentry/node":"^5.15.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.29.0","@typescript-eslint/parser":"^2.29.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.6","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.4.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.5","css-loader":"^3.5.3","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.4.0","less":"3.9.x","less-loader":"^6.1.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.4","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.5","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.17.0","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.3.2","sort-package-json":"1.41.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.2.0","style-resources-loader":"^1.3.3","stylelint":"^13.3.3","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.12","tty-table":"^4.1.1","typescript":"^3.8.3","url-loader":"^4.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.7.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.7","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.8.0","@types/express":"^4.17.6","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.2.1","@types/jest-cli":"^24.3.0","@types/less":"^3.0.1","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.150","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.13.2","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.12","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.5"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.12"},"gitHead":"f0d8ba003548eaf9984d6f0f164887fd1e0c5ea0","_id":"reskript@0.26.4","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-3toAcmFndj428GKstObPJ64CPL1jZiYnDroh5YBIDUtlNTNei/cD9e9P+np7kTz72ADbZmuk8jVjYVXuAs7PPQ==","shasum":"5b523167e5fab71cfe229a25a5e837caf7523e3a","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.4.tgz","fileCount":275,"unpackedSize":314855,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4cE8CRA9TVsSAnZWagAAVgEP/38kuz7zdsXSeV9ihO/U\ndf+H3VaVhWID6QXFqWxT+Es6ixIlNbsqAoPrK+wp4G309O0++z5ugETCEYTU\nGS8h9f4QCbMnPHi/CNEMkhW8eKGHySfDgziBN8UAiEbvQQ+OxWTwLD/ApPxI\nfj6pqITysXKvxugY4wbu0m3iA6ovlpzN0HrBvBpjFsN41f32DN/FmNUECwbW\nvy8Y4OV205sg9+AhYTikzNDFuKReAAdMo9+awnJcvmsM2WpNsY4fA0jgt1dF\n6l9VTr6kZ+ujLF2yWIMm9iTKC0xrdaOYshw5yhHHszddfOsceAhWLlVeWrkH\niHj2zJzxZaEf2W1QiIV487wReYw2x/o4zYKUs4kmrKqoFjcCGipaQSQpWBtR\nzYWSX89luR6ReICJlUzbGmQwamUdDbJl3ELdl3UJyRPzGw/wI0fMgcrx6seX\n7ngw4/3N3uC9SxUANDRdUTE5EWGZnsIvL47uMYksEQ36SZeMqPh66tahZQuL\nPEZTcXme+ApKoRMrksNHO4vc4bah3+gJi4XTbSxxh8iasXcTHrHFOpCvihkN\ngcdHdjyasZwxyt0RqI5sMzUWVxY1XJfClok9pNVdEX7LuHkBzA02T5jsmbna\nxFpPQv7iMbCeQvJbPC2Dmu/M5nUdsbAwuvPmbGMMhT3Zz3jMCpvcJVLCQmyb\na20b\r\n=9Rov\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3+ob2gTASg/9S4R/R+JS57JBJWYZonpdIn59zRe+f2wIgIaarNWOBokEQbwmZ2Pj1FeyDPct1W9ox/c7LySdXaJg="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.4_1591853371206_0.009596368809430711"},"_hasShrinkwrap":false},"0.26.5":{"name":"reskript","version":"0.26.5","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.5","@babel/types":"^7.9.5","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.3.0-beta.5","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-json":"^4.0.3","@rollup/plugin-node-resolve":"^7.1.3","@rollup/plugin-replace":"^2.3.2","@sentry/node":"^5.15.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.29.0","@typescript-eslint/parser":"^2.29.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.6","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.4.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.5","css-loader":"^3.5.3","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.4.0","less":"3.9.x","less-loader":"^6.1.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.4","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.5","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.17.0","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.3.2","sort-package-json":"1.41.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.2.0","style-resources-loader":"^1.3.3","stylelint":"^13.3.3","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.12","tty-table":"^4.1.1","typescript":"^3.8.3","unixify":"^1.0.0","url-loader":"^4.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.7.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.7","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.8.0","@types/express":"^4.17.6","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.2.1","@types/jest-cli":"^24.3.0","@types/less":"^3.0.1","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.150","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.13.2","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.12","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.5"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.12"},"gitHead":"eeed899a4943e2eea9d56add623848d86dd8a695","_id":"reskript@0.26.5","_nodeVersion":"14.1.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-0/uzkFiRGr01MH6W1YR5NzHJk45Tz5se3l+7F4G1wbpp0Q3DUZN/71GsLWkuCe9LU4vSG/P0d1wH9Fw6R8HGUg==","shasum":"80ef256ec67f2e3976d3ad4fd18b4988e11d7b46","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.5.tgz","fileCount":275,"unpackedSize":314020,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfAYMKCRA9TVsSAnZWagAAPEcP/3FoCZD/yt4LWXLK3FiC\n3+WXnIQPCPaariCX+BsT3mEhLc4q26a2U7mUtkGjuZicMNPux6gCjkBv6zln\nJXtElwKBbXgNAMOJzV3bmgchLJi49LrTiJTiIHX+qwL+t8adKeUkqll86RMI\n7xVfsxAtfihCFHpnfqGKYYXFzo3GoCWjkvy3UC+N2xk0VIgvrpO2YIRETfuS\nKhBjizTkZvttTXb+pxEpXJy0HKGVvRf+Au30BxGArLhRlsTBE4l8pyQRqlxO\nWLXtHMxlsP+eGnyOrH0rITATUMU5Ut1k6ZZzolYhNEpzKQy1GKDGcrX2+IL9\nLgW/QPjtcVuLB3A74+B5vB0jzA5Osu5yzEyJwoT1R1xOed8GfFLsLBx0p/1V\n5R50BD/9GjA6q5ogpVuQ0z817zACRy8Lb5Ivt7U+VT0vKX0x1R40pFrIF+ua\nSEOlcyNBHMWG4+ZTUBWfJ8NNJUrucf0jNG36Nv66hMHKkup5Xh9M1HuUG36w\nHFKesNxUVseFR63Ep/5rb3HhTPVWrdqFAzRXwosQA83YnComkGSLCqD1Pmnv\n6nzeKu//i4sK4cXbQP0eT6xUKv5e6Agws5Ag0pWJUuN1ZzC76Z/e3fvPLEKr\n4CHMDcPeMxrVhzNohBskUcKV96OAh7uEu0BzNgfpRls7Zqp55v6S4NjahY3+\nI6Tf\r\n=mMSy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChocyO1YkcMFas55KD+ZLXsHAjZ9LFBj/93Tds8AIMLQIgRquo2E8+pBxh7sicaxfBniLtiSn/DIoqHM3CBDlTVNE="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.5_1593934601851_0.48751043255671633"},"_hasShrinkwrap":false},"0.26.6":{"name":"reskript","version":"0.26.6","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.5","@babel/types":"^7.9.5","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.3.0-beta.5","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-json":"^4.0.3","@rollup/plugin-node-resolve":"^7.1.3","@rollup/plugin-replace":"^2.3.2","@sentry/node":"^5.15.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.29.0","@typescript-eslint/parser":"^2.29.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.6","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.4.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.5","css-loader":"^3.5.3","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.4.0","less":"3.9.x","less-loader":"^6.1.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.4","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.5","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.17.0","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.3.2","sort-package-json":"1.41.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.2.0","style-resources-loader":"^1.3.3","stylelint":"^13.3.3","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.12","tty-table":"^4.1.1","typescript":"^3.8.3","unixify":"^1.0.0","url-loader":"^4.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.7.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.7","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.8.0","@types/express":"^4.17.6","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.2.1","@types/jest-cli":"^24.3.0","@types/less":"^3.0.1","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.150","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.13.2","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.12","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.5"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.12"},"gitHead":"0eb24f5314646783a2ea2bbb3953ca053326150f","_id":"reskript@0.26.6","_nodeVersion":"14.2.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1pS0KzQ1Xi3vYX88Uo//9IGhuMrUu83MQ2PZTTA5lIGN+VnpBvwpLePQ28MVhEIwT1OH00zGwXIk/XmFxO4cxg==","shasum":"9aaf4777a9fdf2c898a4ff9529d35484a5496fa8","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.6.tgz","fileCount":275,"unpackedSize":314147,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGoxZCRA9TVsSAnZWagAACd0P/ApuNMXJb+fdIzg500G1\nOWiIMxR7GU+23CElyN/tRi8AsfiddjUNXc3X23qkgRWh8AlFmOsnTicDk8cx\nRa/OM07P3w1waGlQfEOWzsBv9sboZwL+PZT9rYDUmovRwK/mf1PqOyOe3Kze\nEk44HYRwdkBRRO6PO4FgGv9SCn+rtEQJZqZXsGqQBiQg/MS3YmO9xdewfeXO\nHaPZWhy2++F9NgzQ5i9wQ58DdK/t4we7z5m16DCCX+iFYYRmmj++hrmGW0Yu\nxgiFWUZprPdT5IbdiXgyqaHQIQuFkNU1YKU1egt+hjHqqtKDZCSBjJPC+TnD\n3wqPtNAhCOFSM2K1j2cQn+FRwQTXJzNN6QiKx7TOT20v9weItxWAVcoEthLN\nFl6XeyPg6fV/eKd1LQtU/wWX93RUt0Qz1yyF7uYVq8RBYMVXndKu7BHnJkMU\npPkcU7oOJG9zen/8irNx0kxosC/3LkCmiydZR5UCX9B1qOxMCA58WpSOOMRZ\n8wVHFAcObCdBQfw77S1Tw3A2093WgCnk/951QOVpATe5IdRavmgejK7S6zaB\n3bz1PL2uXJO5khiM8v5Dp1J+T0v/4EBOxWnp8I3LuREVE8h+yFLVheKUnBkx\n/1zCka6caZsnPLOnTI+i3M6e6PiY++kWDVSIuBovjZh4cTDjuwwVY7WNDi8f\nfQ6J\r\n=Ogku\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEmEBHmpAktXOPLTwB6oaDaFhxejlIuqG+6AtfWlxpGCAiAJkPEFtBHBH2Z91lLHAHN3nw2LBBB36IvL6//Q6nWR6w=="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.6_1595575384606_0.44618325864287467"},"_hasShrinkwrap":false},"0.26.7":{"name":"reskript","version":"0.26.7","description":"Finely maintained scripts for react libs and apps","main":"dist/index.js","bin":{"skr":"dist/cli/index.js"},"scripts":{"lint":"eslint 'src/**/*.ts'","lint-staged":"git diff --name-only HEAD | grep -E '\\.ts' | xargs eslint","build":"sh scripts/build.sh","test":"yarn run build && node dist/cli test","prepublishOnly":"yarn run build","deploy":"npm publish --registry=https://registry.npmjs.com"},"author":{"name":"zhanglili"},"license":"MIT","dependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-do-expressions":"^7.8.3","@babel/plugin-proposal-export-default-from":"^7.8.3","@babel/plugin-proposal-export-namespace-from":"^7.8.3","@babel/plugin-proposal-nullish-coalescing-operator":"^7.8.3","@babel/plugin-proposal-numeric-separator":"^7.8.3","@babel/plugin-proposal-optional-chaining":"^7.9.0","@babel/plugin-proposal-pipeline-operator":"^7.8.3","@babel/plugin-proposal-throw-expressions":"^7.8.3","@babel/plugin-syntax-dynamic-import":"^7.8.3","@babel/plugin-syntax-import-meta":"^7.8.3","@babel/preset-env":"^7.9.5","@babel/preset-react":"^7.9.4","@babel/preset-typescript":"^7.9.0","@babel/traverse":"^7.9.5","@babel/types":"^7.9.5","@ecomfe/eslint-config":"^3.2.0","@ecomfe/stylelint-config":"^1.0.0","@pmmmwh/react-refresh-webpack-plugin":"^0.3.0-beta.5","@rollup/plugin-commonjs":"^11.1.0","@rollup/plugin-json":"^4.0.3","@rollup/plugin-node-resolve":"^7.1.3","@rollup/plugin-replace":"^2.3.2","@sentry/node":"^5.15.5","@types/imagemin-gifsicle":"^5.2.0","@types/imagemin-optipng":"^5.2.0","@types/imagemin-svgo":"^7.0.0","@typescript-eslint/eslint-plugin":"^2.29.0","@typescript-eslint/parser":"^2.29.0","@yarnpkg/lockfile":"^1.1.0","autoprefixer":"^9.7.6","babel-eslint":"^11.0.0-beta.2","babel-jest":"^25.4.0","babel-loader":"^8.1.0","babel-plugin-import":"^1.13.0","babel-plugin-lodash":"^3.3.4","babel-plugin-module-resolver":"^4.0.0","babel-plugin-react-css-modules":"^5.2.6","babel-plugin-react-require":"^3.1.3","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-react-remove-prop-types":"^0.4.23","builtins":"^3.0.1","case-sensitive-paths-webpack-plugin":"^2.3.0","chalk":"^4.0.0","change-case":"^4.1.1","classnames-loader":"^2.1.0","commander":"^5.1.0","copy-webpack-plugin":"^5.1.1","core-js":"^3.6.5","css-loader":"^3.5.3","cssnano":"^4.1.8","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.4","eslint":"^6.8.0","eslint-formatter-pretty":"^3.0.1","eslint-loader":"^4.0.2","eslint-plugin-babel":"^5.3.0","eslint-plugin-jest":"^23.8.2","eslint-plugin-react":"^7.19.0","eslint-plugin-react-hooks":"^3.0.0","eslint-plugin-reskript":"^0.1.2","file-loader":"^6.0.0","find-up":"^4.1.0","friendly-errors-webpack-plugin":"^1.7.0","g-status":"^2.0.2","glob":"^7.1.6","globby":"^11.0.0","hasha":"^5.2.0","html-webpack-plugin":"^4.2.0","identity-obj-proxy":"^3.0.0","imagemin":"^7.0.1","imagemin-gifsicle":"^7.0.0","imagemin-mozjpeg":"^8.0.0","imagemin-optipng":"^7.1.0","imagemin-svgo":"^7.1.0","img-loader":"^3.0.1","inquirer":"^7.1.0","internal-ip":"^6.0.0","jest-cli":"^25.4.0","less":"3.9.x","less-loader":"^6.1.0","less-plugin-dls":"^0.33.4","less-plugin-functions":"^1.0.0","less-plugin-npm-import":"^2.1.0","loader-utils":"^2.0.0","lodash":"^4.17.15","mini-css-extract-plugin":"^0.9.0","monaco-editor":"^0.20.0","monaco-editor-webpack-plugin":"^1.9.0","ora":"^4.0.4","os-name":"^3.1.0","pkg-dir":"^4.2.0","postcss-less":"^3.1.4","postcss-loader":"^3.0.0","postcss-scopify":"^0.1.9","prettier":"^2.0.5","print-tree":"^0.1.5","proxy-agent":"^3.1.1","react-monaco-editor":"^0.36.0","react-refresh":"^0.8.1","regenerator-runtime":"^0.13.5","resolve":"^1.17.0","rollup":"^1.31.1","rollup-plugin-auto-external":"^2.0.0","rollup-plugin-babel":"^4.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-postcss":"^2.5.0","rollup-plugin-terser":"^5.3.0","rollup-plugin-typescript2":"^0.27.0","san-update":"^2.1.0","semver":"^7.3.2","sort-package-json":"1.41.0","source-map":"^0.7.3","stealthy-require":"^1.1.1","style-loader":"^1.2.0","style-resources-loader":"^1.3.3","stylelint":"^13.3.3","stylelint-webpack-plugin":"^1.2.3","svgo":"^1.3.2","terser":"^4.6.12","tty-table":"^4.1.1","typescript":"^3.8.3","unixify":"^1.0.0","url-loader":"^4.1.0","username":"^5.1.0","webpack-bundle-analyzer":"^3.7.0","webpack-dev-server":"^3.10.3","webpack-merge":"^4.2.2","webpackbar":"^4.0.0","worker-loader":"^2.0.0","yargs":"^15.3.1"},"devDependencies":{"@babel/plugin-syntax-jsx":"^7.8.3","@types/babel__core":"^7.1.7","@types/case-sensitive-paths-webpack-plugin":"^2.1.4","@types/enzyme":"^3.10.5","@types/enzyme-adapter-react-16":"^1.0.6","@types/eslint":"^6.8.0","@types/express":"^4.17.6","@types/friendly-errors-webpack-plugin":"^0.1.2","@types/html-minifier-terser":"^5.0.0","@types/html-webpack-plugin":"^3.2.2","@types/inquirer":"6.5.0","@types/jest":"^25.2.1","@types/jest-cli":"^24.3.0","@types/less":"^3.0.1","@types/loader-utils":"^1.1.3","@types/lodash":"^4.14.150","@types/mini-css-extract-plugin":"^0.9.1","@types/node":"^13.13.2","@types/rimraf":"^3.0.0","@types/semver":"^7.1.0","@types/stylelint-webpack-plugin":"^0.1.5","@types/username":"^3.0.0","@types/vfile-message":"^2.0.0","@types/webpack":"^4.41.12","@types/webpack-bundle-analyzer":"^2.13.3","@types/webpack-dev-server":"^3.10.1","@types/webpack-merge":"^4.1.5","@types/webpackbar":"^4.0.0","husky":"^4.2.5"},"peerDependencies":{"classnames":"2.x","enzyme":"3.x","react":"16.x","react-dom":"16.x","webpack":"4.x"},"peerDependenciesMeta":{"webpack":{"optional":true},"classnames":{"optional":true},"enzyme":{"optional":true},"react":{"optional":true},"react-dom":{"optional":true}},"husky":{"hooks":{"pre-commit":"yarn run lint-staged","pre-push":"yarn test && sh scripts/staging-test.sh"}},"resolutions":{"**/@types/webpack":"^4.41.12"},"gitHead":"43eaacc13a9a0c5a7c6f40d882e693b28c2e520d","_id":"reskript@0.26.7","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-h6XT56KrcowY3QaPfMG/FezvhLDxNr01WMOABFXrOzl4Juo5rQaexeSzcA6SmX69QJzx639biVWRn+jwOHIYFg==","shasum":"60c002db2cf7eeea276e65036afed0e8fc7741d1","tarball":"https://registry.npmjs.org/reskript/-/reskript-0.26.7.tgz","fileCount":275,"unpackedSize":314505,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfL+JsCRA9TVsSAnZWagAADQEP/iPjgKKaRywUwFC6H6m0\nvjEsrYorNJK2UJcCLwRvZP78RjUKG0tfXLdy59FBc8txYw/4QzBer0dp/L08\nc3VzAYRkke0ESWqsNVshhLmThvFSQ2SrI/LXpK0um7KBpiZ9e1WMVZxnh7nc\nLSdVDYuj3tlvLmxD9OIWZ2kSdHvjLArxB8u3d206BZosgDnUjdcAlNa1/kK6\nZ8FlUEj1/2r1e9rnOJBnOJdEMSjAlmsFa4p9sQ7xWPfPphaPzi73n5Mm6dGx\nk7npCRrRS4F58DCtUzQGvgRvLYlkjdmXwpxDvw2vHqJGBIVMkD9YpnKCJDbW\n4V0gUyH/VqRiSZLcnVGnZ+l05uYv3smfvLAy90a+f0OpKkLTjhVPAJnOTNiX\ngz1dha8T6Z+FjDwZqUMmFdUeyfJ1ErMN/kJVpyVfdIOfXzI+KTKToMD5p7d1\n/aLJWXL+8fkxI+uIAm3/CB6vmiHGYb0mPs+wNrCCa1INsdRB/3+oRD/yOD28\n+sTxbcNyrPCMUPQohfwP3ROOVVCD+E6pOq4Z5fQl/erhvjr4ln8PdTelfvir\n/s9GtZdElyOor2MMcbKe0QWHWGSGnJicPv/VkuER3lcFxOXaSeqgwIqinzKq\n6Bu+qZMsTwnGI9Kj+RJgEzNljKA7w0ug33WTNf2+nuzRLulntKzd73tZUF6H\nl6dn\r\n=JXBT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvsrnyATxc9MxARAlnAjggw54gaGZzXMo4algkHU3CbgIgMXa5E32j1hLprmdlyK1/sq+QimsiHT79nH9MKrrmDnQ="}]},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"_npmUser":{"name":"otakustay","email":"otakustay@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reskript_0.26.7_1596973676108_0.4380570527584382"},"_hasShrinkwrap":false}},"time":{"created":"2019-03-03T07:05:04.776Z","0.8.0":"2019-03-03T07:05:04.930Z","modified":"2022-05-15T21:05:36.092Z","0.9.0":"2019-03-07T03:32:18.588Z","0.10.0":"2019-03-07T04:05:57.553Z","0.10.1":"2019-03-08T02:18:35.001Z","0.10.2":"2019-03-11T05:42:40.386Z","0.11.0":"2019-03-13T08:04:44.278Z","0.12.0":"2019-03-18T07:19:19.865Z","0.12.1":"2019-03-19T08:23:43.127Z","0.12.2":"2019-03-21T07:34:43.831Z","0.13.0":"2019-03-26T08:23:58.388Z","0.13.1":"2019-03-30T07:48:40.273Z","0.13.2":"2019-03-31T14:44:06.332Z","0.13.3":"2019-04-03T04:53:13.877Z","0.14.0":"2019-04-14T07:18:11.120Z","0.14.1":"2019-04-14T07:40:05.658Z","0.14.2":"2019-04-15T05:20:14.831Z","0.14.3":"2019-04-15T05:45:37.979Z","0.14.4":"2019-04-30T05:51:07.912Z","0.15.0":"2019-05-06T06:56:47.055Z","0.15.1":"2019-05-07T09:14:28.356Z","0.15.2":"2019-05-13T10:42:37.915Z","0.15.3":"2019-05-17T07:45:05.924Z","0.15.4":"2019-05-19T02:59:09.199Z","0.15.5":"2019-05-19T11:43:06.788Z","0.15.6":"2019-05-20T06:22:03.904Z","0.15.7":"2019-05-20T07:21:12.290Z","0.15.8":"2019-05-20T08:17:28.039Z","0.15.9":"2019-05-21T08:01:22.407Z","0.15.10":"2019-05-25T04:33:25.919Z","0.15.11-local.1":"2019-05-27T08:17:45.383Z","0.16.0":"2019-05-30T17:07:43.676Z","0.16.1-beta.1":"2019-06-09T06:08:38.115Z","0.16.1":"2019-06-09T06:35:24.770Z","0.16.2":"2019-06-10T07:55:47.523Z","0.17.0":"2019-06-20T09:32:32.553Z","0.17.1":"2019-06-26T07:47:33.445Z","0.17.2":"2019-07-02T09:40:11.474Z","0.17.3":"2019-07-06T04:28:59.018Z","0.18.0":"2019-07-06T04:35:42.907Z","0.18.1":"2019-07-11T11:00:05.095Z","0.18.2":"2019-07-12T01:49:12.909Z","0.18.3":"2019-07-12T04:02:33.018Z","0.18.4":"2019-07-12T04:47:51.365Z","0.19.0":"2019-07-19T08:35:38.130Z","0.19.1":"2019-07-26T03:49:03.362Z","0.19.2":"2019-07-26T04:00:04.577Z","0.20.0":"2019-09-07T06:53:39.510Z","0.20.2":"2019-09-25T07:33:27.724Z","0.20.3":"2019-09-25T07:39:59.372Z","0.20.4":"2019-09-25T08:54:08.149Z","0.20.5":"2019-09-26T05:49:13.255Z","0.20.6":"2019-09-27T04:49:27.209Z","0.21.0":"2019-11-05T10:41:07.997Z","0.21.1":"2019-11-20T10:38:00.220Z","0.21.2":"2019-11-29T08:42:31.850Z","0.22.0":"2019-12-05T09:15:57.717Z","0.23.0-alpha.1":"2019-12-06T06:36:16.361Z","0.23.0-alpha.2":"2019-12-06T07:59:26.347Z","0.23.0-alpha.3":"2019-12-06T08:12:25.716Z","0.23.0-alpha.4":"2019-12-06T08:39:34.720Z","0.23.0":"2019-12-06T09:00:59.284Z","0.24.0-alpha.1":"2019-12-09T05:33:47.606Z","0.24.0-alpha.2":"2019-12-10T02:23:08.728Z","0.24.0-beta.1":"2019-12-10T13:53:45.072Z","0.24.0":"2019-12-11T07:38:34.185Z","0.25.0-alpha.1":"2019-12-18T03:27:20.041Z","0.25.0-alpha.2":"2019-12-19T08:08:33.073Z","0.25.0-alpha.3":"2019-12-24T08:59:10.899Z","0.25.0-dev.1":"2019-12-27T07:17:23.973Z","0.25.0-dev.2":"2019-12-27T07:38:50.300Z","0.25.0-dev.3":"2019-12-31T02:26:58.293Z","0.25.0-dev.4":"2019-12-31T02:52:00.541Z","0.26.0-dev.1":"2020-01-06T09:43:55.224Z","0.26.0-dev.2":"2020-01-06T09:49:27.765Z","0.26.0-dev.3":"2020-01-06T10:19:24.767Z","0.26.0-dev.4":"2020-01-10T10:08:58.437Z","0.26.0-dev.5":"2020-01-11T08:20:50.954Z","0.25.0":"2020-01-14T05:28:57.879Z","0.25.1":"2020-01-14T05:52:58.125Z","0.25.3":"2020-01-22T10:53:46.380Z","0.26.0-dev.6":"2020-01-29T05:53:13.819Z","0.26.0-dev.7":"2020-01-29T06:36:09.004Z","0.25.4":"2020-02-01T09:03:22.356Z","0.25.5":"2020-02-04T06:50:31.571Z","0.25.6":"2020-02-04T07:31:43.763Z","0.25.8":"2020-02-07T02:44:57.259Z","0.25.9":"2020-02-17T05:26:56.229Z","0.25.10":"2020-02-19T13:38:23.928Z","0.25.11":"2020-02-24T09:35:09.885Z","0.25.12":"2020-02-24T12:13:38.345Z","0.26.0-beta.1":"2020-02-28T02:59:57.441Z","0.26.0-beta.2":"2020-02-28T03:02:33.095Z","0.25.13":"2020-02-28T03:22:45.403Z","0.26.0-beta.3":"2020-02-28T04:49:14.808Z","0.25.14":"2020-02-29T05:02:18.835Z","0.25.15":"2020-02-29T05:47:10.473Z","0.25.16":"2020-03-03T06:18:08.579Z","0.25.17":"2020-03-12T05:38:30.788Z","0.25.18":"2020-03-26T06:38:39.769Z","0.26.0-beta.4":"2020-03-29T07:15:29.593Z","0.26.0-beta.5":"2020-03-29T07:44:30.164Z","0.25.19":"2020-04-09T09:30:48.050Z","0.26.0-beta.6":"2020-04-10T09:04:46.569Z","0.25.20":"2020-04-10T10:44:49.306Z","0.26.0-beta.8":"2020-04-10T10:46:47.511Z","0.26.0-beta.9":"2020-04-12T07:11:35.548Z","0.26.0-beta.10":"2020-04-13T08:12:15.917Z","0.26.0-beta.11":"2020-04-13T08:28:48.637Z","0.25.21":"2020-04-13T08:44:10.005Z","0.26.0-beta.12":"2020-04-14T06:49:34.922Z","0.26.0-beta.13":"2020-04-14T07:32:04.391Z","0.26.0-beta.14":"2020-04-14T07:48:04.277Z","0.25.22":"2020-04-20T07:57:02.825Z","0.26.0":"2020-04-26T07:44:50.057Z","0.26.1":"2020-04-27T03:26:19.693Z","0.26.2":"2020-06-11T04:59:53.125Z","0.26.3":"2020-06-11T05:10:18.250Z","0.26.4":"2020-06-11T05:29:31.401Z","0.26.5":"2020-07-05T07:36:42.014Z","0.26.6":"2020-07-24T07:23:04.785Z","0.26.7":"2020-08-09T11:47:56.300Z"},"maintainers":[{"email":"chenze2168@gmail.com","name":"buzheng"},{"email":"netcon@live.com","name":"conwnet"},{"email":"yuxuan.huo2011@gmail.com","name":"huoyuxuan"},{"email":"otakustay@gmail.com","name":"otakustay"}],"description":"Finely maintained scripts for react libs and apps","author":{"name":"zhanglili"},"license":"MIT","readme":"# reSKRipt\n\n基于react与antd技术栈的命令行工具集合。本工具目标整合Lint、Test、Build、Babel、DevServer等一系列功能，使产品线不再重复性地维护复杂的配置文件及相关脚本。\n\n## 关于数据采集\n\n`reskript`默认不进行任何数据的采集，如果支持本工具的开发，可以选择打开。在打开采集后，会采集使用过程中的异常信息，异常信息中将包括：\n\n- 当前操作系统中的用户名。\n- 当前操作系统类型和版本。\n- 异常发生的详细堆栈，可能由于`webpack`的异常信息，导致包含一部分的源码。\n- 使用`reskript`的目标系统的名称，取自`package.json`中的`name`字段。\n\n可以设置`RESKRIPT_TRACK=on`来打开采集功能，如：\n\n```shell\nRESKRIPT_TRACK=on skr build\n# 或使用更全局的环境变量\n# export RESKRIPT_TRACK=on\n# skr build\n```\n\n## 安装\n\n**要求系统安装`node >= 8.9.0`版本。**\n\n```\nnpm install --save-dev reskript\n```\n\n在安装后，会增加一个`skr`命令。修改项目的`package.json`中的`scripts`部分来增加相关功能：\n\n```\n\"scripts\": {\n    \"lint\": \"skr lint\",\n    \"test\": \"skr test\",\n    \"start\": \"skr dev\",\n    \"build\": \"skr build\",\n    \"analyze\": \"npm run build -- --analyze\",\n}\n```\n\n以上列出了`skr`命令的常用功能，如果有定制化要求（如使用`build.sh`代替简单的`skr build`），则同样可以调用这些命令完成工作。\n\n## 自动生成配置文件\n\n使用`skr satisfy`自动在项目中添加需要的配置文件，并安装相关的依赖。\n\n```\nUsage: satisfy [options]\n\nSatisfy project dependencies\n\nOptions:\n  --ts            whether this is a typescript project\n  --type [value]  your package type, either \"app\" or \"lib\" (default: \"app\")\n  --ut [value]    environment of unit test, \"node\" or \"react\" (default: \"node\")\n  -h, --help      output usage information\n```\n\n初始化会为项目添加以下内容：\n\n- 添加`webpack.config.js`用于WebStorm解析路径，注意这个配置文件不用于实际的构建，仅供IDE参考。\n- 添加`eslint`的配置，指向reskript指定的规则。\n- 根据`--ts`参数，添加`tsconfig.json`或`jsconfig.json`。\n- 根据`--webpack`参数自动安装`webpack`的依赖。\n- 如指定`--ut=react`，则自动安装`enzyme`。\n\n如果已经手工完成以上步骤，则无需运行此命令进行初始化。\n\n## 检查代码\n\n使用`skr lint`检查代码规范。\n\n```\nUsage: lint [options] [files...]\n\nLint files, by default .js(x) files under src and webpack are linted\n\nOptions:\n  --changed                    lint only changed files in git workspace\n  --staged                     lint only staged (both partially and fully) files in git workspace\n  --allow-unsafe-react-method  allow UNSAFE_* methods in react component\n  --fix                        fix possible lint errors\n  -h, --help                   output usage information\n```\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## 测试\n\n使用`skr test`测试。\n\n```\nUsage: test [options]\n\nTest\n\nOptions:\n  --cwd [value] override current working directory (default: process.cwd())\n  --coverage  indicates test coverage information\n  --watch     watch files for changes and rerun tests related to changed files\n  --target [value] specify test environment of the project is \"react\" or \"node\" (default: \"node\")\n  --changedSince [value] runs tests related to the changes since the provided branch. (default: '')\n  -h, --help  output usage information\n```\n\n`skr test`会自动搜索所有 .test.js 结尾的文件运行，建议的文件结构为\n\n```\n/__tests__\n    * util.test.js\nutil.js\n```\n\n然后在 util.test.js\n\n```\nimport {add} from '../util';\n\ndescribe('add', () => {\n    test('1 + 2 = 3', () => {\n        expect(add(1, 2)).toBe(3);\n    })\n})\n```\n\nCHANGE:\n0.25.17 之后\n\n1. 不再支持相对路径的src目录参数，resolve src只是cwd下面的src目录。影响是：只可以在eefe root目录级别运行skr test，才能正确resolve @/ 到 src/ 下面\n\n2. 添加了根据项目里的jest.config.js来配置jest的能力。\n- 如果项目中有jest.config.js，需要指定reskript/config/jest-react.js的**相对路径**（根据当前项目）来引入skr test的默认配置。例如：'./node_modules/reskript/config/jest-react.js'。 如果使用require.resolve('reskript/config/jest-react.js')，需要变成相对目录，`'./' + path.relative('', require.resolve('reskript/config/jest-react.js'))`， 前面的 `./` 是需要的。\n如果是react，引用`jest-react.js`，如果是node，引用`jest-node.js`。\n- 如果项目中没有jest.config.js，skr test会用默认配置（与preset相同）\n**注意**： 如果用了jest.config.js，settings下面的test值将不起作用。\n\n## 实时预览组件\n\n使用`skr play`可以打开一个实时编辑页面，用于测试及预览指定的组件。\n\n```\nUsage: play [options] <target>\n\nStart a playground to debug a certain component\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd()\")\n  --build-target [value]  set build target, default to \"dev\" (default: \"dev\")\n  -h, --help              output usage information\n```\n\n如执行`skr play src/components/UserInfo/index.js`后，则会进行自动构建，随后可在`http://localhost:9999`中打开实时预览页面，页面左侧可编辑代码，右侧进行实时的预览。\n\n## 打包基础库\n\n使用`skr rollup`来对基础库（非业务系统）进行打包，底层使用[rollup](https://rollupjs.org/)实现。\n\n```shell\nUsage: rollup [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]   override current working directory (default: process.cwd())\n  --mode [value]  set build mode, default to \"production\" (default: \"production\")\n  --clean         remove dist directory before build\n  -h, --help      output usage information\n```\n\n可以在`settings.js`中导出`rollup`对象，允许有以下属性：\n\n- `{Object} namedDependencyExports`：指定第三方库的命名导出，具体参考[rollup-plugin-commonjs的说明](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)。\n- `{string} styleOutput`：指定样式的输出格式，为`\"inject\"`时内置到JavaScript中，为`\"extract\"`时输出为与JavaScript同名的`.css`文件，为`\"index\"`时输出为单个`style/index.css`文件，默认值为`\"index\"`。\n- `{string} target`：指定编译的目标平台，为`\"web\"`、`\"node\"`或`\"universal\"`，默认为`\"universal\"`。指定`\"web\"`时仅用于浏览器，但可以基于此做一些优化，如移除node模块的依赖。\n\n除此以外，当前版本不暴露任何配置，封闭了`eslint`、`babel`、`postcss`等能力。\n\n## 构建系统\n\n### 基础目录结构\n\n构建系统对目录结构有一定要求，必须包含以下部分：\n\n```\n/src\n    /styles\n        *.global.less # .global.less文件不会经过CSS Modules编译，可放置一些全局的样式\n        *.var.less # .var.less会被提取作为LESS编译时的变量，内部仅可声明变量（以及注释）\n    /entries\n        index.js # 主入口\nsettings.js # 系统配置文件\n```\n\n其中`*.global.less`事实上可以放置在任意位置，只要是以`.global.less`结尾的，均不会经过CSS Modules处理。\n\n默认`.less`文件内可直接使用[EST插件](http://ecomfe.github.io/est)提供的内容，其它相关loader的配置请直接参考源码，不再赘述。\n\n#### 特殊文件命名\n\n以下是可用的一系列特殊处理的文件命名规则：\n\n- `*.global.less`：定义全局的样式，不会经过CSS Modules处理。\n- `*.worker.js`：定义Web Worker，会被编译成一个Worker类。\n\n### 全局变量\n\n在源码中可以使用以下的全局变量（通过`DefinePlugin`提供）：\n\n- `process.env.XXX`：对应环境变量中的值。\n- `$features.xxx`：对应Feature Matrix中的特性值。\n- `$build.mode`：构建时的`mode`值，建议使用这个变量来代替`process.env.NODE_ENV`。\n- `$build.version`：当前构建的版本号。\n- `$build.target`：当前构建的目标。\n- `$build.time`：当前构建的时间，为ISO格式字符串。\n\n以上全局变量可直接使用，不会被`lint`功能认为错误。\n\n### 系统配置\n\n对于业务系统，必须在项目根目录下放置一个`settings.js`，该文件为项目的整体配置，需导出`featureMatrix`、`build`、`devServer`、`addition`及`plugins`共五项。基础库也可通过`settings.js`（可选）导出`rollup`用于第三方库的构建，但与系统的构建无关，参考前文：\n\n#### Feature Matrix\n\n除第三方库类型的项目外，要求所有系统使用Feature Matrix维护源码，避免Feature分支开发导致的合入困难问题。\n\n由`settings.js`导出`featureMatrix`对象，该对象的每一个属性均代表一个Feature集合。\n\n一个项目必须至少包含以下3个Feature集合：\n\n- `stable`：用于全流量。\n- `insiders`：用于小流量。\n- `dev`：用于开发。\n\n以上3个集合为必须，其中`dev`仅在开发过程使用。如果系统本身没有灰度机制，可以使用最简单的模板：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n```\n\n#### 构建配置\n\n由`settings.js`导出`builld`对象，可以包含以下属性：\n\n- `{boolean} thirdParty`：是否以第三方库的形式构建，第三方库的构建不使用`featureMatrix`、不拆分chunk，同时构建产出不带hash、不产出HTML文件。\n- `{boolean} reportLintErrors`：构建过程中检查代码规范，默认值为`true`。如无特殊原因，禁止关闭这个开关。\n- `{boolean} extractCSS`：是否将CSS抽取到独立的`.css`文件中，默认为`true`，当CSS的顺序有问题，或者构建第三方库时，可以选择设置为`false`。\n- `{Condition} noCompileScripts`：无需经过babel编译的JavaScript文件列表，仅包含项目源码部分，不要包含第三方的库。\n- `{Condition} noModulesStyles`：无需经过CSS Modules处理的样式文件列表，仅包含项目源码部分，不要包含第三方的库。如果整个系统没有使用CSS Modules，则该配置的值可以为`[() => true]`。\n- `{string[]} styleResources`：用于编译LESS的变量资源文件列表。每个文件均会被注入到所有的LESS文件前面，作为全局可用的资源。\n- `{number} largeAssetSize`：生成静态文件的限值，以字节为单位。小于该值的会被编译为DataURI内联，大于该值的会变为单独的文件。默认值为`8KB`。\n- `{Object} browserSupport`：支持的浏览器范围，用于[babel-preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)。\n- `{boolean} styleName`：是否使用`styleName`来调用CSS Modules，默认为`true`。\n- `{boolean} polyfill`：是否自动引入`core-js`的相应polyfill，默认为`true`。如果你使用了其它方式引入polyfill，设置为`false`即可。\n- `{string} extraLessPaths`：LESS中`@import`的查找路径，默认为`src`, `node_modules`, `src/styles`这三个目录。\n- `{string} cssScope`：给所有的CSS选择器加上一个作用域，如该属性值为`#foo`，则`header > .navigation`会变为`#foo header > .navigation`。\n- `{Object[]} copies`：需要进行复制的静态文件列表，用于[copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin)。\n- `{string} appTitle`：应用的标题，用于生成`<title>`元素。\n- `{string} favicon`：favicon的位置。\n- `{string[]} excludeFeatures`：构建过程中需要排除的Feature名称，默认排除`['dev']`，其它均会被构建。\n- `{boolean} autoRouteSplit`：自动根据路由进行code split，具体参考[自动路由拆分](#自动路由拆分)章节。\n\n#### 调试服务器\n\n由`settings.js`导出`devServer`对象，可包含以下属性：\n\n- `{number} port`：启动的端口。\n- `{string[]} apiPrefixes`：需要代理的API请求的前缀，如`['/rest', '/api']`则会将所有`/rest`或`/api`的请求代理至后端。\n- `{string} defaultProxyDomain`：默认的后端域名，仅需填写域名部分（如`engmapbeta.baidu.com`），可以被`--proxy-domain`参数覆盖。\n- `{string} hot`：是否启用HMR，可选值为`none`、`simple`或`all`。使用`none`时禁用HMR；为`simple`时开启简单的HMR，仅对样式等资源生效；为`all`时开启`hotOnly`配置，并自动打开React的HMR。\n\n#### 入口页配置\n\n构建或调试允许定制入口页，也允许单系统多入口。\n\n系统必须有`src/entries`这个目录，其下放置所有的入口文件，默认的名称为`index`。每一个入口对应以下文件：\n\n- `[name].js`：入口的启动脚本。\n- `[name].ejs`：HTML模板，以EJS作为模板格式，如果一个入口不存在对应的`.ejs`文件，则会使用默认的模板。自定义模板可使用`htmlWebpackPlugin.options.buildIdentifier`获取构建版本号。\n- `[name].config.js`：生成入口页面的额外配置，这个文件的`module.exports`对象会直接传递给[html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)，可以定制化页面信息，也可以将额外的数据传递给`[name].ejs`模板。\n\n例如某个入口页面的`<title>`希望得到修改，则可以在`[name].config.js`中这样写：\n\n```javascript\nmodule.exports = {\n    title: '定制化的标题'\n};\n```\n\n入口页的模板（`[name].ejs`）或配置文件（`[name].config.js`）修改后，**需要手动重启调试**，当前版本并不会自动监听这些文件。\n\n#### 额外配置\n\n由`settings.js`导出`addition`函数，该函数将接受一个构建时的环境对象，并返回一部分webpack配置。\n\n**当由`addition`函数返回的配置中包含`module.rules`时，自定义的`module.rules`将完全覆盖默认的配置（不会做任何的合并策略）**，其它的配置项则会通过[webpack-merge](https://github.com/survivejs/webpack-merge)与默认的配置合并。\n\n所谓构建时的环境对象，即通过`build`导出的对象，外加通过命令行提供的参数。通常来说，其中的`mode`属性是最为重要的。\n\n#### 默认配置\n\n以下为一个常见的默认配置，仅供参考：\n\n```javascript\nexports.featureMatrix = {\n    stable: {},\n    insiders: {},\n    dev: {}\n};\n\nexports.build = {\n    appTitle: 'React App', // 修改为应用的名称\n};\n\nexports.devServer = {\n    port: 8078, // 修改为不与其它应用重复的端口号\n    apiPrefixes: ['/api'],\n    defaultProxyDomain: '', // 修改为测试环境地址\n    uuapCallbackURL: '/',\n    presetUsers: [] // 添加模块登录的预置用户\n};\n\nexports.addition = () => ({});\n```\n\n#### 使用插件\n\n由`settings.js`导出`plugins`数组，数组中的每一项为一个函数，函数接受`settings.js`导出的`{featureMatrix, build, devServer, addition}`对象和当前命令行参数，并返回一个相同的对象。\n\n插件会按顺序被依次调用，最终返回的对象用于各种功能。\n\n### 构建产物\n\n构建输出到`dist`目录，所有静态资源放置于`dist/assets`目录下，入口HTML页面放置于`dist`目录下。基于Feature Matrix进行构建后，不同Feature集产生的文件也都混合在一起，无需分隔为不同目录。\n\n在Feature Matrix的模式下，线上分流需要按照HTML文件名分流，如主流量分到`stable.html`上，小流量则分到`insiders.html`上。而`dist/assets`目录则不需要设置鉴权，以便Sentry或Firefox等应用在无Cookie的情况下可以成功下载到Source Map。\n\n如果当前系统线上无法基于HTML文件名分流，则参考“启动构建”章节使用`--build-target`参数进行兼容。\n\n### 启动构建\n\n使用`skr build`构建整个系统。\n\n```\nUsage: build [options]\n\nBuild entire app\n\nOptions:\n  --cwd [value]           override current working directory (default: process.cwd())\n  --mode [value]          set build mode, default to \"production\" (default: \"production\")\n  --src [value]           specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]  create index.html according to specific target\n  --analyze               enable bundle analysis\n  --clean                 remove dist directory before build\n  -h, --help              output usage information\n```\n\n默认基于Feature Matrix构建，需要线上的Nginx等服务器配合分流。如果没有这一能力，则需要指定`--build-target`参数，该参数指定的Feature集合的构建结果会被复制为`index.html`，以便上线部署时不会出错。\n\n### 打开调试服务器\n\n使用`skr dev`启动调试服务器，初次构建完成后会自动打开网页。\n\n```\nUsage: dev [options]\n\nStart dev server for debugging\n\nOptions:\n  --cwd [value]            override current working directory (default: process.cwd())\n  --mode [value]           set build mode, default to \"development\" (default: \"development\")\n  --src [value]            specify the dir containing source files relative to cwd (default: \"src\")\n  --build-target [value]   set build target, default to \"dev\" (default: \"dev\")\n  --proxy-domain [domain]  set api proxy domain, only domain part (www.example.com) is required\n  -h, --help               output usage information\n```\n\n在调试过程中，会监听`settings.js`的变更并重启调试服务器，重启后不会自动打开网页。\n\n### 自动路由拆分\n\n当`settings.js`中的``exports.build.autoRouteSplit`属性为`true`时，会启用自动路由拆分，该逻辑会找到合适的拆分点，要求需要满足以下条件：\n\n1. 组件被使用在`<TrackRoute components>`属性上，如`<TrackRoute exact path=\"/admin\" components={AdminPage} />`。\n2. 对应的组件必须是默认引入的，即`import AdminPage from '../AdminPage'`的形式。\n3. 必须配合[@ecomfe/react-track](https://www.npmjs.com/package/@ecomfe/react-track)使用。\n\n在满足以上条件时，如下代码：\n\n```javascript\nimport AdminPage from '../AdminPage';\n\n<TrackRoute exact path=\"/admin\" component={AdminPage} />\n```\n\n会被编译为：\n\n```javascript\nimport {lazy} from 'react';\n\nconst LazyAdminPage = lazy(() => import('../AdminPage'));\n<TrackRoute exact wrapSuspense path=\"/admin\" component={LazyAdminPage} />\n```\n\n以此获得webpack的code split能力。由于`lazy`后的组件必须搭配`Suspense`使用，所以依赖`@ecomfe/react-track`的`TrackRoute`组件支持（内部自动添加`Suspense`）。\n\n**当前无法保证此功能100%满足场景，开启后请小心测试。**\n\n### 定制化构建\n\n如果默认的构建配置外加`settings.js`无法满足，或需要在`settings.js`中的`addition`部分复用一些默认的配置，则可以使用`reskript`提供的函数辅助创建loader相关的配置。\n\n#### 复用loader\n\n`reskript`导出`loaders`对象，内含了生成常用loader配置的函数，包括：\n\n- `babel({cwd, mode, browserSupport, ui, styleName})`\n- `css({mode})`\n- `cssModules({mode})`\n- `eslint({mode})`\n- `less({mode, cwd, extraLessVariables, extraLessPaths})`\n- `postCSS({mode, cssScope, lint}, {external = false} = {})`\n- `styleResources({cwd})`\n- `sourceMap()`\n- `style({mode})`\n- `img({mode})`\n- `url({largeAssetSize})`\n- `typescript({mode})`\n\n以上函数的相关配置均参考构建配置的对应字段。\n\n#### 复用规则\n\n如果在复用loader的情况下，还希望复用`module.rules`的相关规则，`reskript`导出`rules`对象，包括：\n\n- `script(env)`\n- `less(env)`\n- `css(env)`\n- `image(env)`\n- `file(env)`\n- `typescript(env)`\n\n以上函数均需要一个完成的配置对象（`env`）作为参数，该对象即`settings.js`中的`addition`函数接收的参数。\n\n对于需要修改某一个规则的情况，建议在`rules`的基础上移除需要修改的规则后全部应用，再增加自定义规则。如某个项目需要将`.css`文件的规则修改，则可以如下配置：\n\n```javascript\nconst {omit} = require('lodash');\nconst {rules} = require('reskript');\n\nexports.addition = env => {\n    // 先移除css的规则\n    const baseRules = Object.values(omit(rules, ['css'])).map(rule => rule(env));\n\n    return {\n        module: {\n            rules: [\n                ...baseRules,\n                {\n                    test: /\\.css$/,\n                    use: [...]\n                }\n            ]\n        }\n    };\n};\n```\n\n`reskript`无法保证每一次升级时在`rules`对象上保持完全的向后兼容，如上的写法可比较灵活地应对升级导致的规则的增减。\n\n## 获取webpack配置\n\n为了方便与其它工具如[react-styleguidist](https://github.com/styleguidist/react-styleguidist)进行整合，`reskript`允许通过程序获取webpack的配置。使用`createBuildConfig(env)`及`createDevConfig(env)`函数分别获取完整构建或者开发调试用的配置对象。\n\n其中`env`对象必需包含以下属性：\n\n- `{Object} projectSettings`：来自`settings.js`的对象，通常使用`require('./settings')`获取即可，具体结构见前文描述。\n- `{string} mode`：构建的形式，为`development`或`production`。\n- `{string} usage`：构建使用场景，为`build`（构建产出结果）或`devServer`（开发调试服务器）。\n\n其它可选属性参考`build`及`dev`命令的帮助文档，所有命令行参数均可在`camelCase`化后作为`env`对象的属性传入。\n\n## 辅助排查\n\n当`skr`命令出现不符合预期的问题时，它很有可能是因为间接依赖的第三方包导致的。由于`reskript`并不使用shrinkwrap机制锁定版本，因此需要导出所有第三方依赖的版本来确定问题。使用`skr doctor`可以得到排查问题的相关信息：\n\n```\nUsage: doctor [options]\n\nCollect debug information for et itself\n\nOptions:\n  --cwd [value]  override current working directory\n  --json         print result in JSON format\n  -h, --help     output usage information\n```\n\n通常使用`skr doctor | pbcopy`可将结果复制到剪贴板中。\n\n对于新项目，建议直接使用`skr lint`检查整个项目。遗留项目可以使用`skr lint --changed`仅检查修改过的文件。同时在Git的`pre-commit`钩子上使用`skr lint --staged`来保证入库的代码是符合规范的。\n\n## TODO\n\n- 支持DLL：等autodll-webpack-plugin升级后实现。\n","readmeFilename":"README.md"}