{"_id":"earth-scripts","_rev":"133-5f2b8f078584a07c180e2fc79c0f548c","name":"earth-scripts","description":"earth for node script","dist-tags":{"latest":"1.0.11","alpha":"3.0.0-alpha.4","beta":"3.0.13-beta.3"},"versions":{"0.1.0":{"name":"earth-scripts","version":"0.1.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","gitHead":"d4358a86ad000520b4b26eef03ee9619480733aa","_id":"earth-scripts@0.1.0","_shasum":"2d3f0be424b695c73b634bdb88bdf0e2f1f8bc6c","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.2","_npmUser":{"name":"davidfeng","email":"946401639@qq.com"},"dist":{"shasum":"2d3f0be424b695c73b634bdb88bdf0e2f1f8bc6c","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.0.tgz","integrity":"sha512-aO+3dV5TqtBc41sK5PAAPIK5zfqxv36kkwlv6E+aWSHBCpv6lJdY6TMBegeZWDKfx5cOft117yZ9EzPrE3c7EA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWaqsH55UDFtwATfSlhPVzdn2GIbbySGiT2xt+M9Va6gIgEVBJz+1MiAhu/w6uZBL9M7xlSZ58nvnWvmFrclREq+Y="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts-0.1.0.tgz_1506603508598_0.44162385165691376"},"directories":{}},"0.1.1":{"name":"earth-scripts","version":"0.1.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-plugin":"2.29.0","jest":"20.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"^4.0.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":".","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.0.tgz","gitHead":"44bb09d066886abc599a99f51a2ffaaca49a07b4","_id":"earth-scripts@0.1.1","scripts":{},"_shasum":"f2b237fbad47a3261f5eaa86c6bf5816f3c877e8","_npmVersion":"3.10.10","_nodeVersion":"6.11.2","_npmUser":{"name":"davidfeng","email":"946401639@qq.com"},"dist":{"shasum":"f2b237fbad47a3261f5eaa86c6bf5816f3c877e8","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.1.tgz","integrity":"sha512-pnxznJrFHjqj3Oast0oEsHAYVPvfsV4v38OngrhSBKTmyPcZvEIDGzE0BkEan5fa2degohyXyagskGYBuSbMow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICV+SVBpYaD3lDPWN2I2qUFGIB42O5qFgCyZKUHkPJL/AiAQ3k0s8aLb3BMdIkfgZvtTNLufxcSJ1uXH3EqU1DmL1A=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts-0.1.1.tgz_1506666568188_0.9786074666772038"},"directories":{}},"0.1.2":{"name":"earth-scripts","version":"0.1.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^2.0.0-beta.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"^0.1.3","html-webpack-plugin":"2.29.0","jest":"20.0.4","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"^4.0.1","react-error-overlay":"^1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":".","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.0.tgz","gitHead":"f79c71a99f642e9b7d348df01f574960702e3b35","_id":"earth-scripts@0.1.2","scripts":{},"_shasum":"c579a4d906522b628ac9a9590719ca39d4d25958","_npmVersion":"3.10.10","_nodeVersion":"6.11.2","_npmUser":{"name":"davidfeng","email":"946401639@qq.com"},"dist":{"shasum":"c579a4d906522b628ac9a9590719ca39d4d25958","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.2.tgz","integrity":"sha512-RgV2/67E6B06l5FXCC32hkCTyQctfiXDP2EuZ3kthdoEcWJjy+R/X/BKh3rRm6xyr4/HiKZydE4C+UNM0N+q8A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzEqCl5mhvkorecoqL1jsTDmu6LF8NsqaHGddKTpYoKAIgRLw/00sls0hYueh6FVH4nbJJ0qX8lBCjCMcMNAVWQXA="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts-0.1.2.tgz_1506666931600_0.47107896534726024"},"directories":{}},"0.1.3":{"name":"earth-scripts","version":"0.1.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^2.0.0-beta.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"^0.1.3","html-webpack-plugin":"2.29.0","jest":"20.0.4","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"4.0.1","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":".","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.0.tgz","gitHead":"3606f17778a6bec71c92ffc80401f36b3e9a04ca","_id":"earth-scripts@0.1.3","scripts":{},"_shasum":"1458a063f32d1a7145e8a83bdbd948426043d622","_npmVersion":"3.10.10","_nodeVersion":"6.11.2","_npmUser":{"name":"davidfeng","email":"946401639@qq.com"},"dist":{"shasum":"1458a063f32d1a7145e8a83bdbd948426043d622","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.3.tgz","integrity":"sha512-0zyz3CDbsKyIW4sm8dEx9TMQ/sEqKSj37uMsw8Ke/oNGk6u8oSV1o70AV+y9nHBDm9YcS5V/UYcSG+qXk3HmAg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE1b2CqBrfZdBhr8nKyFMkYJka0B3lGQ2bZguHwuyurNAiEAk993V6Qr6mG2kn7wr/B/Q5yaYz60p+MLu8HbZ9U/seM="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts-0.1.3.tgz_1506668971887_0.7979159085080028"},"directories":{}},"0.1.4":{"name":"earth-scripts","version":"0.1.4","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^2.0.0-beta.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"^0.1.3","html-webpack-plugin":"2.29.0","jest":"20.0.4","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":".","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.0.tgz","gitHead":"52baeb704343c37116312c49b5cedaf5766417ff","_id":"earth-scripts@0.1.4","scripts":{},"_shasum":"2f11142fe48918cc41daa87129c19d68caea0c00","_npmVersion":"3.10.10","_nodeVersion":"6.11.2","_npmUser":{"name":"davidfeng","email":"946401639@qq.com"},"dist":{"shasum":"2f11142fe48918cc41daa87129c19d68caea0c00","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.4.tgz","integrity":"sha512-fopHjhvM2wsZoj3np9L+TBGBO2bWcfvNuRVWsCel+T/mPcIDKEIQgVuPLkhzHmX3GFZQynzVkxRQt39ctvtB1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBljoi2DFy8GPG6/SVCbS9AKUPDuKHCEPA+JYPgZHLEQIhAKxmQDk8dyjQMLrdY+0qpvS3QO74FyZ5jrPX+1Zol9jo"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts-0.1.4.tgz_1506669599232_0.15954061737284064"},"directories":{}},"0.1.5":{"name":"earth-scripts","version":"0.1.5","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^2.0.0-beta.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"^0.1.3","html-webpack-plugin":"2.29.0","jest":"20.0.4","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":".","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.0.tgz","gitHead":"ec682b46ead087726bd4bfd920edb4c67cddfe09","_id":"earth-scripts@0.1.5","scripts":{},"_shasum":"b68725992892c0742728d9a79e521ae907e2e476","_npmVersion":"3.10.10","_nodeVersion":"6.11.2","_npmUser":{"name":"davidfeng","email":"946401639@qq.com"},"dist":{"shasum":"b68725992892c0742728d9a79e521ae907e2e476","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.5.tgz","integrity":"sha512-tlVxAWQllp9t7RE5cdIp6MIwxQTgyZaCFny00h5yOkYcLM67pYRGVhHPR+CUoOCKTpl95KP1YDyDTMTv5bqkTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB5ddrjJOjrYBpzYRaXGiQh6ev1M4eUtbIopIFTc+zWYAiBwOfVOtTbFyRoZ4blSpfFQCKbqHGCP+S5KVS0QiRwy+Q=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts-0.1.5.tgz_1508499222415_0.531314137391746"},"directories":{}},"0.1.6":{"name":"earth-scripts","version":"0.1.6","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^2.0.0-beta.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"^0.1.3","html-webpack-plugin":"2.29.0","jest":"20.0.4","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":".","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.6.tgz","gitHead":"dc4b26b04c4137fd7b1e7a6bffd9b1f15ee94a7c","_id":"earth-scripts@0.1.6","scripts":{},"_shasum":"0ba07306ffc48e990243a6c1a598d41ec7fa760f","_npmVersion":"3.10.10","_nodeVersion":"6.11.2","_npmUser":{"name":"davidfeng","email":"946401639@qq.com"},"dist":{"shasum":"0ba07306ffc48e990243a6c1a598d41ec7fa760f","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.6.tgz","integrity":"sha512-Vh7zOsRs/5X23ZCUCPSvRxrrvMDmEQ6iGyB0d0WeVf37snY2zbEiWPiVCxtSs/AYXjLElyUDuPFaLLMN4iviww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVC/xtCh+szmf5ILIoXCbzTcVvDQyYS/5p0wFrEMhs/AIhAK9mQLHzNMqPTJXlMpBVLDnTP78ayrAeT9qt3/TgiJxx"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts-0.1.6.tgz_1510801760644_0.5638867868110538"},"directories":{}},"0.1.7":{"name":"earth-scripts","version":"0.1.7","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^2.0.0-beta.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","jest":"20.0.4","json-server":"^0.12.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.1.7","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","gitHead":"251a3e03f12dfda35ea81292dad37bbd38688b69","_id":"earth-scripts@0.1.7","_npmVersion":"5.6.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-Li1jFI52C6XaP6q6BOvJbd1Kf1Ha5Qlo6+Tnib/fVmQkJACg8Z6FQ1XHjJ3NkTrbijjmx4UGk+Um5THSLoaRPA==","shasum":"7f5e2f52f437ce3603103e7d1ba69cce9f2f28fb","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.7.tgz","fileCount":22,"unpackedSize":73265,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHROSvjiIyY50JpBRQ6CW/BIRxzG2z9gv9mQepbPrmp4AiAInGcmbg5jp1j+oJfvx+p1DljQMY0CCvbM4dT/IK9aJg=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.1.7_1520413796706_0.41295692128924677"},"_hasShrinkwrap":false},"0.1.8":{"name":"earth-scripts","version":"0.1.8","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^2.0.0-beta.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","jest":"20.0.4","json-server":"^0.12.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.1.7","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","gitHead":"c77738af98d465693c928f9218a3e6ee705f416c","_id":"earth-scripts@0.1.8","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-ZPUlMe0qhRAyK9yFuN/amluFkUnZr/AhzXXEN0Efx3AaeOmQD7BN5mXSyDn+UEIy1trSuCKiSntUebzArMu2Yw==","shasum":"6f9e449028b488412ad88570528b15fae609a680","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.8.tgz","fileCount":25,"unpackedSize":82074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2ZErCRA9TVsSAnZWagAAxjIP/iBG9wDoVJc+PddCk3L7\nVClv20p1y3FZYt118tvpsR6iYkop3tI1Mxo4kvmVzWEFIX/HVfuWil42JFP3\n4IUGTDpbmqnMOfzqhw3K7TZYOoNq8qCy/NjsVoa0hnTEUU2M0IDuouPV+Byx\namlGylhXFQrIJCRAJhcAJP2AgwTNaOXOi6hXUHMD3lP00yilRKBhvDE2GkCQ\nykmJYhu46BMq7lTAqOf4v5g6jLVZqdNOLtlqsot4B/T+AlCHJZMlNnxQK2E7\nJz9ZgPT9aWnUxmEbo34da3+ffd5ZtkJ+ZGlDjAmDopxGmrJSqACKiSs7fhMK\n0Coy6IILxZGpCT10840U+MFA6d1L1Fiufk7Wjx9Er+K5oqaFv6zwjw6AzKBh\nsWfaa+XTaH6CoRkSodAQ/DkIwVbVC/9YIYZxzqijYHLUmHPUU/tPDlqmYrJX\n+SQNRE7PP16jBxFjZ5bLwENsHd2khGOLicwATR2yTrmh52Y8epo65PqJh8Kl\nj6YzOt6LSj+3Mm1N8+ulO1Yxv9xQCutvXsCNDoM+rVucdP0XirzHMmE6OtzS\nttqnpAYX9q0gp+38GxLuuduM9G4U0r3H2J5xZNI/qRob4EAFMsysRnnktDDR\n4vnOnFcY5GS6SeYmWXKsK3RFEt62BRTn08I89vMaY5c5D+7J3KnYuYWaRHdH\n9B/q\r\n=x8h+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkQAAeHBUO1Uj72fQifPnQNoOTyJe0csiDG5U8cDqqkgIgPs7JQFgT4dU5K8+yErJyvAE/ubZvTxIMG5uSow72/sw="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.1.8_1524207914948_0.23863501733484727"},"_hasShrinkwrap":false},"0.1.9":{"name":"earth-scripts","version":"0.1.9","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^2.0.0-beta.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","jest":"20.0.4","json-server":"^0.12.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.1.7","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","gitHead":"82831a55bf2d36207e19f72a7fa408808b22a2e6","_id":"earth-scripts@0.1.9","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-lkw7hkO4X9a7DTA5XTgAvizXLzlMHk+pY5Rz600TVNOg/Fxgb8vKaW67gDlAQFWJ8PObkX5J86SkdQFCZOLFFA==","shasum":"54506e952c44f65d7020c891e0bbea23c4f8154d","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.9.tgz","fileCount":33,"unpackedSize":102844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4t+RCRA9TVsSAnZWagAAuhQQAJqWmGqhylq2MICL1dbf\nz6MKhOefdeqa05Hj+tTdnr6oNd+Hyh2JNuLfp+lPHreOde8wVHVZVgT1Yu+r\n9eCjZ09dtjPREWkFjkHC5u6TpN/BM6d3y+BmmdriQs8DgVSY14Xq08/cmb/e\nvXyNYLwFptlta+EvZiATPFXleyj91WZrHzQrmKO49gzmbk6/7/bsEIaPsmbx\nnCyiErObAgl9bPoYY0hEwf/C2lg9si9NRfuSfWuhH3EC9ZGoj9rriV1wLS6H\nPRBppf5KhoWuQ8i8fMgv3iWvmEPS3BOSOEF9tLGNB9Q0Q/kUfp/yAgj/Np6G\n+C2M5mMVgsIhYGT7GwB3B3HAsqpWFC86QB5mNXg68NDDpGL1jHZxGO10YX0V\nK1Gd2zg74PX/douzfA54k8Ik8kmi2a2fxRahdn1isUUS6WO7u6SHx9hIi8Y8\n+hyiOM+Pbzp1MGj6MsX/CSZz8nWFYBgIbf4v99RzX38JYN/K/wMC1kjdGl2M\nvzxW2o7d4UNDBQRzyMa4G62KQNKHnX/Fq0IhSUFF6x6rUIvaEj54dwA3j0cd\nbCVPeKyTNZBQlVcW2VYSPrma4wY/cvVXzpe1/MyvxHVwKlgFBPBGTrXjw+nE\nfKJI3VP4Rz8+XQfqoogPaCxW325xJygZJqkFBVreqe0DP0vfVTuNNS/tOthb\n/hxg\r\n=fX5J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzR3pSX8nQh3J26lR/IEEZI1HW2M9bI3wL0z9uvHMh8AIgLvfYyU0IQYHyarBlvM30QIRR1gpU6kY8yrThNlN9YRc="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.1.9_1524817809401_0.06644009511036475"},"_hasShrinkwrap":false},"0.1.10":{"name":"earth-scripts","version":"0.1.10","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^2.0.0-beta.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","jest":"20.0.4","json-server":"^0.12.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.1.7","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","gitHead":"7b7d179cd39387ed957f8f0f695ed5d67cd38cf9","_id":"earth-scripts@0.1.10","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-DlAEipAEG31peScTEGd3J/Y5uJK5tvKLLJf8Kk360Ft8adtMyNzpkmWpGceTJDlf4YqYtNP08DcC2RoZSgeLmA==","shasum":"e5c0264fc8a39dc9011dfd35e92fe37a6671429c","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.1.10.tgz","fileCount":33,"unpackedSize":98117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa8o4SCRA9TVsSAnZWagAANrwP/2aKblhXblExNBf+w8xY\nFGCCQ9FLqG/KOXkOeroXkwS9PehEY/mR952D/GewpZ63Q2C3q4mCphEPn23K\n0mOP7+I8EaznIX7zjJzBoHDuGS0RhQVL9b39PMTHBe53PkdAqZD1V5Hn9VWY\npPKikbZ3AXsv51VjSX/Pmx/QVDvwqQbFiWIHlpgPa1GOEi1a/3/nPe48uL/7\nVwWWjPjddmOUE+kiNsCYAgQMcIDruKqFISjkhx4UEC+TpXcQJmu1oytB+12Z\nyaCyb+Ljvvf49hxeYOuPrVhpvyTOkQ8hh7r6WJYsIQ8baKZJIKvw1sNiS9cP\ntggRy/niCBaDshRBNHU1dYXtvOzn+NPFTl0K40HG1YP9rY8kL0dBHfquaL8d\nMDFvXYIwMNAhPqzZ/eBvAyQPRykAEKYbo/81GgkuQZlBa2lqU6Q0/kubujjM\n3FJZge4l44MMrA8YdEKTal/GL1DMLqZzZQH9Xqr8QUCM5Svc+m7S9hY4aXTl\nV1Q43giOy287lp48WBblp+zepySqBI9QysqY9oxBse7LMYNYQkqzzk4Gwtms\ntFO2w3YBBeUedhhlFMnhboLXbXQAqzUB6VswN7bMHJ9/WDc39Cgae0JNeIUw\nq6boI2cimQOmUd0/MUBrQcPbpqiAxOdkdPgcl+knjqz+ye8RVD7vT70cFvaZ\nrEne\r\n=mD90\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHcXHvuLrhsGK2tPeskV+6IWM0Mls0jglMMT5FSGYQs4AiA9RKrG6+G1sIg11rrEElzkEfbWaGTDZqMWWl1qvkd23g=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.1.10_1525845520651_0.24991909714854565"},"_hasShrinkwrap":false},"0.2.0":{"name":"earth-scripts","version":"0.2.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^1.6.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","jest":"20.0.4","json-server":"^0.12.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","gitHead":"2963b6fe038820562d6a874714efed710134b4fd","_id":"earth-scripts@0.2.0","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-pGZt4UYRGue8AQCZdt0NOOQE76dTKb26M6PvFg6Nm+UT9a8pZ+VI94LRuztrWHUgGC2pFYywBMiTdRIvzPOMGA==","shasum":"0b21aa80872836f244803a34af19adb1492fcfa9","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.2.0.tgz","fileCount":39,"unpackedSize":98811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFLO6CRA9TVsSAnZWagAASS8P/11hz92ggyCzEcxbq2kT\nI+ZWCqqlHr6sN5x35BGKv503MiJhd/tUp7sETvRC7Kdjgc07RiscKvhb86+p\noLHPVd6FG6QlPZK20SnqnA/edmuXJfFlY2xz7GvVHlodoK/olmWxFxYy5i+/\neGKPoZJSP92kSdnF6RYmIHi348SWH74STxRhXHalz8ZmhNPCuTI4WZOqT8CW\nEqQ2a2Vp3hzui5pguLbVJukHkFO/JaXqVU4uFAQVCdqmn2A0jY10hv6z2u0R\nlYxNSO7/y/IqSbxjocASezWZvbYf8nM59Vrv8pVxNGD5bWaN2PBDyjChw3a3\nYqnzJu9vEcx7TqJ6jrb0mpfc7vJ1NUocUxWJJyuybO2P+6UlKbJLZ99DHODv\nDbwOMJcju2aKNVlfsDbOZndbd3Btb4FEsnPtn642A4C/l5Awy2+66vMEX3mY\n5iyT7z2syReifGH2vxM/LgTcuBC8691IVEqbUq6hs5kdB6uNIX4CWd9mmhQe\nNb+5fsjFKdF81Kwh1xSRM84Sk+w8rTJOH1AXk0sTJH0wSa3WBP6RN3DsGHvr\nLZ8yficX6EVPHKAF91wKLjGlEqJIzMHBDvKNIkI4aVlgL66OQtzhEvIFHDhz\npTPTCB6ZhUk7vM1H8xWEd7VwbgfHFfqqfOGpcLeYzk2deXxS3meySWlQwzPW\nsiqU\r\n=Cif/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHpX+0WChloxBqaC3GAtHTaqYi5q2yXmBHCH/lJILTW3AiEA8tr2QuCG4b05kqii0otks76jw5JIk8AyB6g4EvXDILw="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.2.0_1528083385517_0.8560572150507197"},"_hasShrinkwrap":false},"0.2.1":{"name":"earth-scripts","version":"0.2.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^1.6.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","gitHead":"da373db6602106e50bd403a5c31415495ef5607a","_id":"earth-scripts@0.2.1","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-1RIwsFH1lBoNxNkw6kgUh5LXR/t44oxEd0H3h2RgixRkJMSwJMPJXPub/BQfkz10a9VGcl2UWC6dg8msKSvFvA==","shasum":"06adfed5be9c304e1834c74f2b3c0504dc3a28ed","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.2.1.tgz","fileCount":39,"unpackedSize":99717,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGO35CRA9TVsSAnZWagAAO/4P/jQ0X/vSqbNCB7gk4VEh\nWlWTlhjTOS/j9+RVlzIa3Y9a4iPkvnAQV+2snVthaRQBtx5b3abPtvvcJPeA\nLqcGH2jMzjYo+sc941YU4lM2W5fntPSMSHMdjp8rtoHK/YUte27ymJFlNiDa\nfBEk4hZvJfwPQaeex6PleSHH0NFIvU1yrYsfAXiWD8idYImO+n9Y5MFZ/7F2\nH5JRNypPwPAmPbgt2PmLaIhauQumxyiCpdpLXP64g78fcmbeoB4syepU556o\n7S8rm6/PId/+StziQX4rMftZvo08HPxkvYroMyi9UiAPCK3zw8PQWlTxLIwk\nUMnYoytfgLPhRmaBs8JCGa2235iBKwru9nv49dB4sdVUmu4vTj1h/OZjwBJ5\n7Cr5mSPpkZI3dF3qPeDgjhkd+/zOIktuWho3Zw7Y7qKyKfmExHYcQO3LClsO\n5GahfuO0lF7LZxRwS6Ydd/nuaEL1v5GkkCShJdLGhvva0XBoBQWSQFPwgy4N\nhJ6c2iyKRm9dBEnKLOwZ/MPo44PhIzwEl88/ckXHBJ0A2hZL8e+lgxMAGscT\n0LKBFrkW/zGujXjQGgZvD1kJdmHPp6n8GR3+2wcZ2a+YlCeP4rjbLLW3Z5BG\ndXdccJIUl67bHW+5xxAURYm3vS7M0X3e83D6FRHISSx5sOzckNuD+LbqkAIf\naz7j\r\n=JPKe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICN7TMVswilD2+CV2EORh0prMs41jDLiBPS+WHCmf64vAiAHd9nrRs280dYWd0unHXmMA+4onHcKJquxho2UDzl0lA=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.2.1_1528360440335_0.3489216890053588"},"_hasShrinkwrap":false},"0.2.2":{"name":"earth-scripts","version":"0.2.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^1.6.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","gitHead":"9eb271c32ae6e63b9d791d49f72b3612769b8ef1","_id":"earth-scripts@0.2.2","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-fSQY3sABfiAxJxrivlUCLPFE7pv7EYkR3SVLGYOkjJtI/aIYkjON+1oaK1ZugsAbjVD1RdS/Js3wNY6CuGvBYg==","shasum":"9791caa17a6408c6302467cbf3bdf84ca3a5265d","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.2.2.tgz","fileCount":39,"unpackedSize":99690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGPCICRA9TVsSAnZWagAAe90QAIuLbGIdJGMD8em8AIql\naYJosCZFYA24E66zi7ELiwmKoUmYypK6pdEon/fk7VLUSP3a4N9hj6Rvj7Id\ng7VRtVfchkiwQbHgi1aNkZlKMJ4yZFumW7U5xRqidx+cKZHcQM4ts4xMlUqN\nge5LzK98mSJeqHtetd2dlqhEO5eWOx9LekQ03WmIYebbU9LfZX8wr8B3AgRV\nJB1OiL+8/6hZQ642d3F4MWcZhzrzIzfBbt7VXE5vZ8iE95Yvzx8H6Q7Ss1bA\nogJ8hfJHIRVItKFu06bcZe2kGL4J9S9qhcOPGiksmjsJT3vLQENulXU8x6ec\nnCvdjWsOoiakKFLPQ8TeL90qewdKFU9RsZsNymZy50O4OEvAd6iqp5yNMHJ+\nYTMHgZwxPSgTMQgMkJcBN+bBwcW7h36X6yHaAZ8MJPTBxU7+hhDRYDxCIrkp\nn6aOZ0PKKZ8UvpGrTszlVdjvycz3W9mCzZ8VVEGpXBzNdUEPI1xdJeUYBE5p\nCwf8cTLNMBKTqSsZbAW8wdMxpEc5D8//iJWlCnz9SnEQgd19n5fSZla1HNgv\ne67ZBSNEhj8W99Am353Pj26Y0QCpd/oapUqZeGWbQXhGkv2ieeB2LG5ia/eG\nhOLz/nqG6+TfVFfs+Uq2AFQLjNqvOrAZVH090BzdGxZ/Vr58oXRPoBptzi0K\nmJM3\r\n=Z3Z4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBqDW3wN6ylXmmuJCzn38aoUUqjv8V4o4GG6BXH/ap/OAiEAmNi8CjB7cF3GHNpyWPJuzxEfBSF+zNccXp1ypuJjLgc="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.2.2_1528361095868_0.8757643600271408"},"_hasShrinkwrap":false},"0.2.3":{"name":"earth-scripts","version":"0.2.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^1.6.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","gitHead":"067b641b3eeb1b60ff551211526520f1617f0724","_id":"earth-scripts@0.2.3","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-N2P9nrC5sjwhGuWpEH9ZYvrwMVs/AM8P/jrWZm/LRlU/tXylSeSBuX0OolNdXqDaKZm0f50fUMf+H2MbuPX3Sg==","shasum":"131ea79824e13ed7d193c11d3aa2add0c16c7316","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.2.3.tgz","fileCount":40,"unpackedSize":100627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGPbhCRA9TVsSAnZWagAAgN8P/3h3/suxVYt2qJiwNWmQ\nhQDzLjBaQ1APmXjJvWKFRVzFzK4CNrIAsXq0BsXZqCe4wjrplgVzMtuK1cE8\nV+WqEAUZIM+A061Sg1HZNQdsrVg4g+pTiY/FMZ2ttNBND2vcmRXNor+KJnOT\n9m3JIT4hDfbdkWGd6uBZ+2BE+g2FOuJC5hJspVjyBPqxnnhajI0lT2NeFIJ+\ng6sI8WFtIT4aBoXnFHjyuCK82REUyZp08bMzPw69qMTm4N1XmcDxGKboekkf\n41hVez7qvMvi/IADEUGlM7HNNjmEKzJWbHgHbDL0JL3MVffZPb55KgzXf53k\nNaW+BgLNgtHHrn8s8zX4lCMFEEPebvrLBkXQ522o3/mwc1+1/d7UOMtOG3f7\njhm8yDZIF1FcS1VKwUjRyAQyKxrLh5WdBNcT5+xPKp9jczaE0KwSWyliBDqh\nYaJ+UVGN3uqVUoB9thb4oDgvvaEE9XKXihsyRLfE+EdjSHp9EBIoM2zIaPkV\nvJE/j0S/BWFL76p+yttJaxr2Mk7mLHg4DMBauqceHQpPzMUei+HBGGFGY5PP\n+f8bZv663c2EU9Gv8Ozc495r0G7lvBoqNDthHfFKDsBdmQftksNpQYyJS4iO\nagFtVQf9E5uiwZX7+9JpIKgmJrpYBG6BmSyfghwOK+VhT3kgPXq6W+gcLFE3\nfg5T\r\n=JBUa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlyoxeuO8v8B0hDKQdHYLGOiGVXmv4BVo2RLarB80zeAiEAl5OptcuKx+RHd8YxbzVdlyKfVBUVxrAAO5lumT/5uaw="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.2.3_1528362721160_0.17962881394860242"},"_hasShrinkwrap":false},"1.0.0-beta":{"name":"earth-scripts","version":"1.0.0-beta","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"^1.6.1","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.8.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","readme":"### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","readmeFilename":"README.md","gitHead":"ac45924340812582b28b5fddebaf629945dc8349","_id":"earth-scripts@1.0.0-beta","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-O9f3jfOZP8HIPcWri0mEIwt0b5P/E2zl/pYRlOnND0U7N2uyW05R+MQcQ4RsfF7k2Wld+cEFU52iHyj4Wz2Avw==","shasum":"80846865b10bfd2cf09ead06ad624eba3e427891","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.0-beta.tgz","fileCount":40,"unpackedSize":100930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGh61CRA9TVsSAnZWagAAMUkP+gPWic9NlIKQsB9mJN89\nHbvZLjtsWXQcIC6h5MDl0vBHMDuiyTFQ+g8WkvCV6x2DR2Y2BILugTnK3sVN\naLVAcKwMADvsjF/hMjE8Hir3NLISurlU58op3Kk3bmU8cUdji9FkRjAsIWG+\nEekGb7n7Gl/p3QCRMTjK2Va587o0z4CEywp7p6p2whykyWNYzCUHpWBauPNA\nOE+fR2ziF3XuI9VyMLXWAsBXjQwFX3r9uBD2EK8DsyKRrTV9TUkz9R6zdO30\nNpw3+8uBPQGbS8Ag7XoOrOA2HJ21jo3LwRjxr1obMKUEh2pvrGe4RYJfXAsq\nSNT3ng3j7Ih4I0f2EaL0CkE/VEuh8VDZxDEaz3ODOlXRua7CXDEVmib7tUd/\n6fN+8Q1Nka2DoxM6r6gkkf1zsx8EnxjT0rH1WLK3k5Y3IlOu0VCDbPaDNtw2\nzL3oJVrHWlSnyh3SQ0FarM6TXx2LPA08SxSesaqgmy++WehowOXeR8fCcFU5\nuP6n1ZDpsVHaZKFKHIP490fbrIyrXccBRJOhemb5bWazDDncbbcWZXjdVp6Z\nAFzb58dlnUJCZBMs1ysRqYg+ughd3WaIMLsOMP6+nxsgEYuggV19S41lLFYS\nP34RZHcDRGcI7/T8IrtEmmgvhHUI/cnIljiZVg/2deLnPvyByhERBTIE0G7s\nZ6My\r\n=IaoZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA2j9F1s4FsC8cyKYYUCOeTSt7kjMWKtYRZEh2ghTn50AiA0GafZaizZ3Jqq1vHRs6D9Pe9tV6AgM3mQRagQgClJeQ=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.0-beta_1528438453210_0.31005567450683746"},"_hasShrinkwrap":false},"1.0.0-beta.2":{"name":"earth-scripts","version":"1.0.0-beta.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.8.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","readme":"### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","readmeFilename":"README.md","gitHead":"d1c161ae12623199bf2637cd6aa564610e0fb5aa","_id":"earth-scripts@1.0.0-beta.2","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-LELvIGRLclVphgCcYt8FkQI2aowkKUkAoV+y4Nr8ePhy2objB48V+E3VZIqpu5kUmPkO4VN+RzXpsNTF9CopJQ==","shasum":"accd2cfd270c92df4b21a04c19493c52f1763bdd","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.0-beta.2.tgz","fileCount":40,"unpackedSize":100930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGifLCRA9TVsSAnZWagAAao4P/0/avLo+d7B4RN5HEC+7\nLl8/izpXExdA6fkcqNi5Q9KMVwd0zK5caw2/9tVm5AivmBNSJc4fXCbVnmc+\nnOyTaxpFwxnZDAV29lpef/ftZY14OaiMZNwek+j4Yt+BWOn2ldooYCwkoK7Q\nq1jMZKzzYjVv3slKg1NfYb/u+LeI9h+mXr4CqH7dfC+LoVB0gMULKr7RPh4G\ntnkhy29Tk2mOKHM80RcPpBipoiCRfsQ0iSNMCq/tOcOyvVCxve+ugOFdvPv5\njX6aors6pob9AXlQObenkhXSVo7GpyosSk0XM+o05gQa6YOmwAnpDAyLEX6x\ncffHyGwQzRoM/ntcfXnNZHJj7rljkKIVwHQzmihON4Hcx/xaU+7gNuSvOvKB\nRxE85kXOYg8Rza06KCmNRazXcPuCPRR2lZ5Y7FAF+nWSMwLJqVPd9VFkKj5K\nCDQHrlED0iBWeSNc2Mj21gmA2Bd9zcSOTKBXvgjHVPvKGpSCzV21eMVR3/pC\n+E4EGBtLxRpNn3GVj/RmNFIpRvW1Kf7zwndw4PTZccFEVyx1SE7N3ol30sXL\nfx3Zm3KO/eoBiHvEPp+CXn7xXwR+Pwsajy260v1MBYvgb3hP5uNVg63UYBpe\nhZAGRu1WKpJI5wufyzO+R0/i5ReY9WbMUzqiCU107eSQEQBUg8aqYg4ND9OH\nRG8i\r\n=FlgM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFmpKI3HGiVqRHrgIACvZrInateuq8b/u9td5E2vr+mNAiBEIkAsUXL+OiyAPePsNi4OZiH7rWRsfYTm3LWkgZ2P5A=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.0-beta.2_1528440778607_0.4505611543798711"},"_hasShrinkwrap":false},"1.0.0-beta.3":{"name":"earth-scripts","version":"1.0.0-beta.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"^1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","readme":"### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","readmeFilename":"README.md","gitHead":"d1c161ae12623199bf2637cd6aa564610e0fb5aa","_id":"earth-scripts@1.0.0-beta.3","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-s3ljTdwFPWM9Oj+lJICBlP0vadwFXWANEC5cxKp0j/mUDkOLSoXTZ+fEtdazaUrtGNPWkRO2simGMk3BIV4ZnQ==","shasum":"1a272674a853ecfd9ce14478622fca8d5a669db3","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.0-beta.3.tgz","fileCount":40,"unpackedSize":100931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGi3bCRA9TVsSAnZWagAAmxsP/2DUPnLrGWCfggy/eHQr\nOuwfmJKeFt9VpVmxGEHS64GvPPVJcRJxPn3p4ie4+P9tufF3L4UzaRTguZJ3\npsNkzGKaq/tncH7Jwpwl43MShCsyEQv/DttrnH/RgZNKBlJZUV3Mwr06FURy\n1QBVQrji8ZvyT07eUJulXoQ99Cq9v4EfnxlYDz9P0Ptjmy+nKVl8WEP/okTV\niwdlFHgCwmKA2YCKov2J9G6G7UglewZPIdoNIQmHVch/RyrUh3euVd19jFJf\nc6oqwOPEQLmEimP5lCi+qaoE7qalN+K6gGXSpevJgoVHT474ehlzk3qYVZg7\nKSsc09bqxVM6QTqiup+HfGf/VZZFt546NhXuDxNnSVi9FhMze7ynfVlDYeXf\nifXU3RMmuVF+w37EuFg90VEubd7SwvHYXfghiPfVvC6ZwTtxD2e6FNHGyZuO\nTC4lLQPfdQFh27uN51KI82UG5skjMW85EPRqVASBuC3Zo5J6ISzjK6j+jwsX\n6sc7CXCP519xWbn/gHEZzPmhq/kFvsZM96yjeugqT9Fb+L5zpI4Y3sWdQw3l\nkqSeJ6R88L6WfQRJl8ENzQrYqUfZPpiXJjpLYkmvg3/MSED4DSNO2oelBI0K\ndOjiykrWiSA9C4mtUx5QOGqF3qNvXZ0pqswjJ8vt7f/Do304HERtm3KQ8ASI\n9jMw\r\n=lxRx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA2V3S5pXlPGtLtUXPNS7pB67b7GpGX5Beptc3NxKPzAAiBlQ1Wvc+kh23AieYusFc3r6G9YQj1dRXAS+yy3AT1ipQ=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.0-beta.3_1528442330732_0.6217350416311707"},"_hasShrinkwrap":false},"1.0.0-beta.4":{"name":"earth-scripts","version":"1.0.0-beta.4","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","readme":"### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","readmeFilename":"README.md","gitHead":"d1c161ae12623199bf2637cd6aa564610e0fb5aa","_id":"earth-scripts@1.0.0-beta.4","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-IyhRoUVOo9tztYOCjjLuGtDqsvIdAonoXhCEprMfsJ9cIV0E2PY4XwwLKld0ynj1ZuV8Otg+GOcRlsGDbpaTIg==","shasum":"a2edccc90a826bf023036f0152e5224cd1db3ab5","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.0-beta.4.tgz","fileCount":40,"unpackedSize":100930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGi+rCRA9TVsSAnZWagAAGj4P/RN5bADRKARZgHMpHixD\nj36aCeu3tL0IByjOoQo9AUH6vOjkf4cZijhkQuvDbggjJEiMqHoS5kcQj2oB\nsFhwhRlD0bVd15Vph25gZUt4X3SFJczD8lPIuU2lWmEhexSthINmqUjVWn3s\n1O0DIa33JykPzx2oiDG8UVPheET85qnOJc8oN0w78skCAwaXHYyBEfunW59S\n/5BgFK7BcGyoTFg567EUsgpjvIBCx6p+8lVjdLpKZtsBr5i/riErkib/YS5h\nkeB3Um1Pg2kx+NRmwoONrEXHFDlG1HivFYI26N+JSgyg9J5G/Dk9wgy4JqUt\nAMz99Zce/cQupM0mG3T04VKvI94n5bf+l/M5n/3ziQs7qi0mAacoy41wEJyv\njhgxQZW4pgKEHfVkEmU179mNCdIGneTxCILSp2+2ChBBwi/J7NFnRKHAxjFw\nWC2Ebj1pwZZQPf0tLTjr0PfVmvtdhR1PH1h8zkukZnoiJx6DnnsLhjdRBlmK\nhrcgsXXwWDvw4geoCbf1/GDiu/BXgdbbjVblbE2v9jawjWhFCVhjEEaxqZcu\nwVJoJILnW0E0XustB95wePTyiFv39wezPt60wUnFZG6uyo+WIob3ZyBDx9R0\nxp4+yaxvonOqM4Uv9GM4megHi/hC6Xp6WqrmdECuM261yNLpzzqYF4fObbG0\nsWps\r\n=payH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDpc+l9wccC9TfMCdEToZAE6ahtfY/jRFVw9AFIew4xEAiEAw9F5yAP29ELGThNzA9n5BkqtvkWVg+SBcHoNzPlyPVM="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.0-beta.4_1528442794539_0.5478976676222773"},"_hasShrinkwrap":false},"1.0.0":{"name":"earth-scripts","version":"1.0.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.1.7.tgz","gitHead":"5468ab1f75c924dfa78f38d5bb6fc8efb322ce64","_id":"earth-scripts@1.0.0","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-tMLxkGeuonPkQVeI7UnJgw+bozUdQ6lg9LU41yY8RCSBSyC330z4mT6bRhP9YMHK5+fBdB8M26xmyiT/xsx43g==","shasum":"d54bbefafab9a99f47f55b3a13d57966e3e73ddf","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.0.tgz","fileCount":40,"unpackedSize":100923,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGjhECRA9TVsSAnZWagAATVkP/RfXqJwKNq4ZfL61CLRY\nyTdUb7HZjwiei1rCoHWwoP7EOuHNMStC2WFkW8YqvnqYokHrZrS6lWs/dH09\neGTKizds3jGt9pTeTa22m22Vdejvpin42HGO/d/0fvP1CNSCMEVUCvLxjrn3\nKIv92gMDTzAdY0laFT2ZqxdQoGbI7LeH+LxNSxqOe4yBBA8Af0FKZ699DgKx\niMfQiXrHdzxotqw6n1TRN6R2C0uQpIi3XMlLX8nn+TUqBFSVPTD+zUx/K8ab\nBZoVX05UmLAMAEGehBxpysco4/AFTQ2fdyEnWHs3WSwq2NbFdWX5d0ZMQZmd\nfUVB5hdaG0VYrrshaX2MpwCm4VEp1WGMY6fYKZsIePLlNvstzEuNTp6NGcjO\n91hxosn8StLqy8tHIlsWpWqVsXzmdyrxWVsCbuI3vlPJ7XlvQyEcfYMzy/S8\nKx9HX93wOJsqeHjkNksCqnsrB/q6EJZAelrv/gG3sHcpG2wDlHSrVC/xoOnb\np/Hk8rNVsCknf+qHYBsnI4OOjswHN8CgbhqZgN1nxEK2htZNt7jYxtmCejq0\nL9iZl7z8u09sgORif9aLi3W+VItki99gbqjaHmpZ+guMp4aV4J5/mHUb87u3\nZAFRuv0MYWYQMeQS0oiQhSY/ddV8L0DCZ6bSMpwoFlHmAjv9A/AQmSJmPoQ4\n+fGC\r\n=rzCj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF8/Zbm9qjE8ejoKc+866NWGGBJIqK1XO9Jf8M+o28PsAiAn7K77BJwhKh8F9OrM7riOYErn1SQ+ur50b6V7MRLTDg=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.0_1528444995174_0.7791365610233256"},"_hasShrinkwrap":false},"1.0.1":{"name":"earth-scripts","version":"1.0.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.1.tgz","gitHead":"06151a0c5d7f62f4dac05f6e1f742134f01f0669","_id":"earth-scripts@1.0.1","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-NIpwrBYsDMa2AoAb4YgOfz+EwZW5yNfO0jGTwuewNKek5bBEcSO01QMqPFQvSyZZ5h7eGhYH+ZdS+UjnSf7JLA==","shasum":"93848480808b0d4694db93c25ea6e61aa90011d6","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.1.tgz","fileCount":41,"unpackedSize":100982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGncjCRA9TVsSAnZWagAA9m8P/Rkm+ZQ7Hnixeqfpcmq8\n1QBn6YIu9IXG9RkHooanl0TevcCAaqQew+74bhc0xb6qmT9INUVhn0ZIgQTB\nNalE8HIG2XyG03J7jG+dqZuqI/05avOWlbPy8cH+ijaq0FA1Rbei/xfrBeMj\n5YxsXHZjiy4ky54ykVyCSrt3uPLdYowvx84dEIcI4L/vmR/KewtEcK0PEG+V\n6MxYGJvKPv+DyU4bU25Qaexd7GR54MVRtgLT/KJiV++rbCPZriWdanPQ9oaB\nIjb7NHlXNpjtaJm8JpNXqYIGdlhXBPYDG63B6Uqjhv4XLOEXy0Wjj7vxeKUz\nQN5Fa7LN8ClsmCHS1+9NxCUL7piVpBxO6rr5SJFmlYYCpavsTxDG54+m9pqH\nW3FDIXpJQ84tEKFaOmoWbmY4cGUx3W0f18Oi+KRgPfDM34a0ntxHe+DKF3wY\nyFjWbwa1DQ29R4+Wb2nBwea5Dzak0XEm7TfxEBpFWxVkxpSZLcsRqz/QAbXs\npUb4mj4oTrJDEawfYppozawVxzXJr4Rg+jv5gr4wcV2kCusGsMywr27gYp1W\nsbOvwHdN5HrN4/V6G8V34A4rGtpObdJMSwLlY/HCRCNUN0BmQv8iPFWwVcWG\nGYcTY5tSwoJNw7juuW0hVhF1AWODMxInPvh4GlLLlZKdgG98ajMH5OQAGYpq\noGHK\r\n=o3qf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtq7CTPzJ+Gn4RHMmfyvYYq/+QG0zL24sqe4cakkvCVQIgc0IwyQcn3Edb1TVfsO+0s53SzdXb9LHJiXVEbP5/OKE="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.1_1528461089621_0.22079014694439514"},"_hasShrinkwrap":false},"0.2.4":{"name":"earth-scripts","version":"0.2.4","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.4","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.2.4.tgz","gitHead":"f5133c69dba5c22bbd7d4b667efc7a9b8a22efbc","_id":"earth-scripts@0.2.4","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-2D9DpC0WaUBc9/33S1F1kug2WYb1oHugBH0CHuQnEhAvg94RgtuPW0+pwd+LabxxqgGRf7jXyadFFfhW7O9ufQ==","shasum":"65ef2919567f313afd798997333f7f36b52a6ec9","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.2.4.tgz","fileCount":40,"unpackedSize":100045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbINRsCRA9TVsSAnZWagAArS4P/0btG0+YfpWMXG1iTLjg\n4O/g4AZ0zQc3TT62ciLt/PcDSEUvAnPUYNS1avEBaW9+2CDQARLh6SVXKOqV\nApYwanxirzUMr7/HmjE/chnOAoMy6M2GsfC/7KYtHXjwjfvCE+Gl2PxtO1Yw\n4m/9EzuU2Nf0PkKnChgEDdHZpJU+sYdXdMvaC21DXkgOU6vjcM5Xe8v/JWXh\nh4g2LE38h+jOk69O/uap15xLvCk8ftGpKqhyYqQmFc/PAhsZY8RkOuQN5MQk\nkUHrSMprQw8wjgLPyPpBuk4x9G3wWQRsGegnyfEiK/cToP1oR4r5kbwZ9z3i\n4AKjvfH1+gfAAa9W9/50KwyoPMi2MzNeigKmsBL9ZD4ceFgffde1GS0+kflG\nQnyhhD3PmSe3g81P0n7ffRLErBAbiwuXyKXoplWVXYYceEM7rx5w5d7Jxcxt\nxdH2zoMT5ZQaq/Rx8YTT2PASLe4UgDRQSnKJ5QE+JOF3V7g4GLwLAPTqv6cE\nUby4ES4LZZa6GbObGd8NdT7UKnPriu/lNXpswb58UAf2AgWg19ccLvAq9bVj\npQ8L/8AEMqtvjUUEfxWUShsvmyAD3V39lLvwM+o6sD00UeYALLe0TPk6iPEk\n9gqCnLt+NQ7xBQ4Wo1NntPxS3Rzh8KlUwWBEOn4pBg9uPc1XKMN4wF2r6Hj/\nDysK\r\n=Pe55\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFBxMFqU/5v5BtA7frFYFaVY6ecfQCiHt/VU007FcJdxAiA0iNwboMGx2GR4CVic4/302eFrU5eQiyBEfGm6SijbOw=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.2.4_1528878188115_0.7076388140120784"},"_hasShrinkwrap":false},"1.0.2-beta":{"name":"earth-scripts","version":"1.0.2-beta","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.1.tgz","readme":"### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","readmeFilename":"README.md","gitHead":"d392f15aa2d07d31b6ba491853eb357f730865b7","_id":"earth-scripts@1.0.2-beta","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-Yr5gAjwVvafuY75svvqWaoZt9aOytenfQ/TNukEn+rphoGotEU21UvGgA2qgqCRkoS0xk4DlMmyL1QryXc13fw==","shasum":"cb8541b71a370fd0124ae92abb3c361f5de083cc","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.2-beta.tgz","fileCount":41,"unpackedSize":101271,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKKr2CRA9TVsSAnZWagAA/SgP/iLWO3a0+gnunqHlK+lu\nGc++pApLa2sRoX/mhvEg+/LP3ICiCmxHThKJc5vmeH/E3wtIBPBrr7dlL/Tc\na9Ic/vvuMT4aulXlmhivJcuqK1/8YELc0AOykcvMKQxR6ROs+w3pDu951oCQ\nZXizW9+x0tQwQx4ssbuzH2dMrRDUmjUwWE7lAnHn8GY+Srj73z+iprK46ffT\nkVKXTi1hOq2qyhWJbl4LC2r2JTOP5y5Fx5cxOU8qkEhLaU8iXB+o/HzZM4pz\nUU523Tn/LNO3K87SQrNfwt1YgKmeBQ1N/62zdqI/Cem5DfQWtURq1LZcEua7\nCW98w6ujDkRIs6xSLK76y0sUcsf/+RNV84U1G17cwdthY7hBQbPbVfADzp5e\nm1UM2fNkTki5xXXSuJMYmQ8rePfl1SgMwokw9Ov8UhLDBufdy9sic8PgXvHt\n3+EB4mosMkxE8IQOvossngV+GCYC2nTydn2ADGjz6voRiuQkzMnMuXcBBPTP\nqG7C/Lb55A4OS6wnn8h3Csi2Cn6QBMuLkd7aPg+cEkT1yxHoA7gZVtK1zjbI\npNUYXSskCzvNU3bVjcaYOMLZBBLagU9DZ+F6O+CiNNUbVW7/WIvhGwApUZS6\n1HDKSt4DfiIFNKwOSqZHIFLn4OwNrn/xbhipJI1xTR7/3u1ONptCpPkYZEpu\nAOUc\r\n=7Apb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC6d/bZ5I6PgNrC2J0Jp1uH3hadyPemPDSnnwgMPIfBRAiEAz93aXu4FMoIZwyMjvEp2bi9XqxidRA080FsK4H+r9UA="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.2-beta_1529391861873_0.4847864002498221"},"_hasShrinkwrap":false},"1.0.2":{"name":"earth-scripts","version":"1.0.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.0","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.1.tgz","gitHead":"d4bf8c256d9d3a51cf7d454939e26a946b26b827","_id":"earth-scripts@1.0.2","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-uoIU9zimo3JvBsbS6LTP6rpqCrjI0RPrgGlP92Ds13ysqRHEtWiZuXn1lhgHpsAI6u8rovts+HaaOWG8bRe1vQ==","shasum":"f6f243c04b3ad4bd855217c6b27c6a5176ec6b44","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.2.tgz","fileCount":41,"unpackedSize":101270,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKMvcCRA9TVsSAnZWagAAkLUP/3HBB31w11S3Y5ydJ86s\nUpfs58VS+WbhhuBSCEyc7fjp4uySjPkcVizruhio8UnfT+RQDuyNxFAmViIa\ny1v96pB3B7augMUtW7/sqHh0cLq43d/ODdkjG+Ghd3RXlAUOUiQdzI6p3ucQ\nBMyUSIE01XXm8epZeab7g9LZVf4dl/Sw/AdDd5lZ5AqyxFXAj+ikGq4Xbkl3\nfQIFe5whtrDKjmtqC7zzwk03seZekM58AsDPBVysdQ8EpvcNH9wJXACB0+Gr\n4Z7n3NXPdpG/XihmN8MZs+HnSTru7O6FZGZA2lvQ/bdSCrfOR5Jhw5Sq/PfI\nRASC8nC/XcEas/bP+u0AyCjMRSIGrKk7/0107EMN1wrwUiRgBYXac9Gw3IgW\nnllWPG+4QIBYaiJ9rARSpanhSTiGr6Va8NSks0I7DbFrgz770YsPIgIejsoJ\nKGgg6XNXBD7cKwHC1CIOvpblUtv8CfvTdt/knB8n+kYpvIKbHjCANOKJV3Ki\ngdktbbdBIBFGO2t5WEQPY8F3I9YypuCle7h59zuCbYFZaian/8CykcQUYnY7\nxQy8pbwprEZRmSag6YkWGw5JVCJvmvtfWyYv6AhJE67+emiyXT5Oy0maEBmi\nx9ZjExx7OsVnMeHqbe9FOHghEZhbYtNXHiBTOrB/aEIxCrVp9Q9RknVdwUuC\n/X3w\r\n=xxUC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZGpQ33ooC8Gan7JWsQ/GY4/1eAYluOyldpyp4FPYehAIhAPE/kcqd5i7nKrDss+DgRs1ul9qmyBoH2ZicX0ePw5cn"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.2_1529400283812_0.8098326695754574"},"_hasShrinkwrap":false},"1.0.3":{"name":"earth-scripts","version":"1.0.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.3","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.3.tgz","gitHead":"139dfedc95197ed974ea2dc473f6447cc50806be","_id":"earth-scripts@1.0.3","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-VLCkxJMza43HuQswNPYCQdAwp/qvONils4At2fRuetJr1KS2NQrnp8mtDwp92jd8cxuR2asLEkVLBgTAL8bGxg==","shasum":"03881e3d0425f43d0814fa6cd5ac57a030c25fd6","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.3.tgz","fileCount":41,"unpackedSize":101272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMi7HCRA9TVsSAnZWagAAlnkP/iJ73/isFXhBxUo36RLw\n5k+hQNUKJ1GoZlbF1Nk9yvh4uDENHDU/BvPqSSTlOoG09eMkzD6WZ97Fnmf4\npTeMzeq3Y1qtvio2OLEDrJWewW3WOy/dFAzXhb0D+G7+sbpkWEEwlLZbLIPt\nZ3Rxr1Hz/BAfBlH6kr9FzrLuzQbixYR3B2m0gqEobR7nV0oA5Dtj/bcJWuPZ\nFqh6BDEcc+QP2fESKexfg3ZVjr7cxM35nKPA32YCnL9juV6pojSrhtAOuaxR\nS0uZWefesw5Kv2y5dJWmqlBtqqhpUJJfV3euhinMe67aEJEq2I319tvU5/SN\nSVP+a9gTqb8/SeSV0wzhplQnegafH5jc9MBj3qKl/lswxdmXPey0+ItSWYNx\nyi2/tY9+Ha+e6nsyvUJqyhR1YP7sXeF7JWBmLsSHl1P4InUBE6tcKt7jUHmJ\naPhv2xQ7T/QRADfEVl+f8xL8aZtCedlGxtYBPgW/C9pGw7mdZosFWjBJXY0B\n7XVfN5kRzNaAoAk6lCNT9GZzRjIqup5EAVifuen6RPulz8fnON95c6ceNs1F\n7qJyDquz0Kqf9CLBqRbjxJSN4+k8cPZJXVy6++nQCInITn7pXmi153MqAXwu\n0TzIcOBWBiMdg9SWGOknBJX2yGViuUd91eJf+CuVq2UqzYmjkCraEhqv1eLh\nmvJM\r\n=MxTD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZPMBbEodRqCccuw2ep//GLnsG+zqJp8k/X8+0Ou7eQwIhAN0gjAcLgtwi+mPGeVHqKxoYZJgLJXJy+XN0ZdKg1L4X"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.3_1530015431466_0.2554472124553233"},"_hasShrinkwrap":false},"0.2.5":{"name":"earth-scripts","version":"0.2.5","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.2.5.tgz","gitHead":"df4db59bc334947ad3b5b73b1766e3c024f69f87","_id":"earth-scripts@0.2.5","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-GI0IkYUm07SfwhHy8m4Ok1cBQ57ZSEen3WX51GMgrfXdp5LFMIg5SJKKDX0CLTUb1P+VaosQN8bLRjZ35UcYRg==","shasum":"f9076844acb12de1dce3400fabc3fd96cafd19c6","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.2.5.tgz","fileCount":40,"unpackedSize":100046,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMi+JCRA9TVsSAnZWagAAXxIP/0rh2CyxtSOsxjgJHS3v\njA3UduquTnnWUdQkhq+sWOmpQt3/X2ZGRoJ2pRzu/U6VkXgKlmL8mHgTFAcD\n7F2+Ei/KEWXhIVR5pcgRXHGQpz7AItabBnFUxwMKO0MIGX/CByQZbK8Gorqs\n1me6qSPftraBuMJ+PLfUdHoDAG3FwG3jePN9zi+xhdkMkRSBA/AqUNIL2TKJ\n1ZLQJ7GGuCZi5lBXz3FhIcmKeum8sma4wOwWnHWwkTNWJ3EGzDnPt8fMXZxj\n7WZtYi0ZpA2v/qxux25eI1ks7tNJyUHOjL9C/GXPZ0+O1lybVj52F+CV5BAK\ndTIViQI7iGnifmo8bGpB84T7gx2ztDYGH/wIrQsWSQ/z1xFGN67ya/8H3HsL\nQRblHw51DsAavcW7n6zqadJEnRESK74KzfP+oW9dOv6YEFaHviCMbgz7hgRU\nDMJ+rXaTwFwMDjAfNuPlNFuoONDShJmFdT7566JEZIiF+HC0dCRy2EMty4Jk\nWsZHiBuSKr7qA76XqIh22QJDVNQXbdGNhQ6auR7Z7myNJzjwaVOQcsXAqnOy\nlvbetBYOXw9sR9uZR5pGR5Qo/yR8KqW6YX1TnA/SLmKv7euBNJUNXugZz4iX\n0AFgyZBA8orwc+/1/D9GTV8YoMn7Oe+S3lAkcIgdWyLE3pWe6LDsaZI1hvx8\nAUHs\r\n=kpxv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCg0h+vNHMLhUQQN3rKSOoyrfBYp2kzTqChVjH2yn22lwIhAKJwzbOAbmuFW2eg5QJkNx9w0B5VcOMKIpyTQyhcESwh"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.2.5_1530015625523_0.008070554146335507"},"_hasShrinkwrap":false},"0.2.6":{"name":"earth-scripts","version":"0.2.6","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.2.6.tgz","gitHead":"1a3c710e6cdf1aee73528309ce751b4b9620b6f2","_id":"earth-scripts@0.2.6","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-X2V4RdlJh7Xq+mUcrcPeUpzPKGPT+ffv3a2PyOtOfggk79u5LXdSoZlrt6XchR9zkMLIrxKwBdNZzzT2H/lN7A==","shasum":"0eb6e688533a63053e9444603223f7f12c1dbaea","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.2.6.tgz","fileCount":40,"unpackedSize":100048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbP0ORCRA9TVsSAnZWagAAqP4QAIPBs2brm5hm6EYi2wBM\nStISPkY9J/kRJ5mYvUr6XJZWP0aVSu8xBkEIZK9tG8wcYX96cfXvZ5GnTOmG\nme7RqOYtQLEnkJadBWDey2OPLdoCE/SimXW1dD59E9qpaPjBZYL7K3YkYF1N\nXRs8sjcMjwjNMMTKOHa9bwmXq+0ghrYIo/fD6E7LzgH7D4Qx9t0dLJlFRC5x\n5HzsP4jWKW8OmlU0uAwKl/IlPrJly5IFOn7uJA7hsh+1iEehNebVXUO/unQ6\n45RKZAMxdJlWYFg7oGnBZ13jGvv0/vJZlIZ/pG+scpqY/HStykmlEAvNU3aK\nNJWK5a51kF83DuW1Ni/i3or/nRve+DEi6oSHKtCPvygMhSP/tqjyN9bldn2u\nyTL3vkMZfc0XmSFZHvxGM5v2pIy6EktnjiqEqetZg6792V9W6oJ4jOp50scK\nlUdn/+/NOXxkiDkIuxn/u9AsNvNh48v0ElSjpNU/ZL5KG7cbUKQbZn5QerbV\nWizXBpoRZwywK2IUIKnYogcPLD0PY3boEaADlgOehCf75pi94fCkauiBNaM6\nSi8z0FneDU594NP4A55BY8/sZH/kk3ayH5BJn+WJ3qAYdB0kpmLebqXpuuF7\n0/FLs5/NV665xkHiOcrr+1MMH/TMeNFCFTeMwtVRM1dLGS89i+uK082Wo5je\nHCgv\r\n=Qqt+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGAs4qap+uIS9kzw2zbdjBBgkNP7JhsLI7mGvalffFTvAiEAsPwRx9d+CuR4SsNznPHjMvy4e9KicItk4GZNALG9soE="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.2.6_1530872721847_0.9855113668925268"},"_hasShrinkwrap":false},"1.0.4":{"name":"earth-scripts","version":"1.0.4","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.4","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.4.tgz","gitHead":"2f69249096a0a5255e2f983554af5a3df2fbe4e3","_id":"earth-scripts@1.0.4","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-LreHbHGqkd18prYbOlP7ClloDqFTsqMHwOgoigj5KMy6KE9E6M76hGqFenzsMY1I3btkBW/q1TWJ68LfSweKwA==","shasum":"bd4c8cbf86cbc726ca846b3141d544be513d37c0","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.4.tgz","fileCount":41,"unpackedSize":101274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbP0S0CRA9TVsSAnZWagAAfgkP/39dkDDUrOjkdfj538P8\nWp3FDENU9QeOJRbp/dfbvFj5pwjTQCcCAVzHOhEBEu6OFOJ1cuwVGFHv2ogI\nMkCAp9ucSqpFgUj2v5uBWHU8zciMifidOljiXox9n2H243gyB5w9eyOWHBhH\nYdeT354aNUJcCFu23JaJXmy6s64KbSTI/BGDQIpDAYAEV4KzSP+pQ2VC3TOe\nFCKjxU0iIRr6ClZhpJiNwdHAlGVojaKTinOn1LpkU/24qU69vqg0VJbvvl3f\n0DZNbDGuaKWaG8WsHi5jkEc3tqtfX4MOOcSf5LOPTJLR5EASZoIiWRnrAVNu\nADkHPZXld+5+LLufwAI+9TfKKpMyFCIC/1p4jFLvzmyTfbHfF94u4FiPQgSB\n0Tz0MR+SaTxTdUVdoSDMGGnhvjxIcxLXKQDO472PqBr8XDQ5olYr7HEkQ74J\nR5ICDeDaEYWo/cmUL2c97FzCkUl7UTp1+xrCwj29EXbCrvYswKyNhAWXyIla\nnbivt2AQ8/BUhjJnAx1Hz+AkzhzqDloxZBXKVUvQVBG0as2pPCWLUl5KPB/h\nVfmrVtnidiPYc0wB21k/TUhNAybrT85rkLWr/eMiPDlTzInGi7skTqc3HFYJ\n3fU/lSzWMuRUflwvNQQGekIk6g8qCXyd05Wb4oqIXN4KeJlaL4+LgtXDVCAn\nzc33\r\n=EaJu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCg4wMa5zAPggvydAVZT3qtZk9W29G7Km8is4gAYs5Q6wIhAJrkrvsReQacHezpfw1fel5S7J7odrYdILoRrb39Tkw2"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.4_1530873012666_0.058683596152863116"},"_hasShrinkwrap":false},"0.2.7":{"name":"earth-scripts","version":"0.2.7","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@0.2.7","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-0.2.7.tgz","gitHead":"525f4a04bf962540d186e43aa7c663ce0f8c6ff5","_id":"earth-scripts@0.2.7","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-4vO16lgVpdHUSf20EB2G4dq6xQw4LC/t2YYuoVX+WP1fuJ8/QihpIv0zK+N4HDF5aGgn7K+uBst1VSt1w+lUQA==","shasum":"7dd2e2526417ba98b0859ce6ae2d80e4ed004210","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-0.2.7.tgz","fileCount":40,"unpackedSize":100394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkKPQCRA9TVsSAnZWagAAiVEQAJG88XHz0HaLLGyzSC0x\nsVyQvI2xHTJXgfErCUR7foOj1OoP+ElSw6Z3d88DlxQ+GGIf1VyHOio/YiX/\nvKjkOI5X+inzraXjJAIgc52uHkIOM159g/kJZH5vGb2F64+HR3x70Vv6lFCI\nVB+wTyZq7jIUiD21Vm93sjByyuJVf8Nd7ZGqmG1yYkLK1WGy1eKoH3fgVccy\nPK+tgLv8s2/1IaPAkzkIpq4UfRI8svXZI+G/jUNcVe/Qr3jOywiiD2xJBXIg\nSarZt4eAqN2tsR5p26+3cdVkSbV1nggRJlKYixGrnAE/E8g59swalHqOyeTX\n3o6KODCvYb8p7v0+Mlar5bNLGQpHzNCyB6BgRRMeExuhuNuyMxvl/jVlwO3b\naSfRu9Ph3J+lJEfewq0T91GjjjHkOxRc+mL3GDyCNDslM1wCjLv0ik/I4+Zh\niaDHJsgSAuwamPgxCRjsVn3yFnohvbQMT1s48iuCXXtbsHu/Ng1MlAQFStSJ\nzlTggAfN809Dt5sibAx0NdVuO7FNKqtf0W4+MdbrrjWuzr4TIu4vrZXCPCkm\ne4uelhh2enqBTxbZM5rhQIL846DvyZasHjTqydT7OKpJx8nxfHSYk5UH/uIt\ncGsvj8YQH5LJ4j81Ks4UiIUGX7HrEiK8zZDgyZ5ELOPBvGFEv3OruZi9wAdd\nK2Ja\r\n=JppJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMGh11US5ze7hOLy9PHbapiIfcJKEBsx3tRxvW2I2qwQIgdTz2ADS+gRz/4AFPo4JyWKTdilf015rLLj5OcPhn0Y4="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_0.2.7_1536205776114_0.43537743430481735"},"_hasShrinkwrap":false},"1.0.5":{"name":"earth-scripts","version":"1.0.5","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","gitHead":"11c5e413666c4f333f17ce3d02c0b9dee3faed06","_id":"earth-scripts@1.0.5","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-1bjYJr23B0J/mF0sH0iB2C3ghL+Yt5cNpsMc1woAHopCj8QFvrI35vN7jbHGMz28R74puDlHMLpoil1sXReKrw==","shasum":"5fa1a4356b8016cc0531c26625ffd7fa99f86001","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.5.tgz","fileCount":41,"unpackedSize":101721,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkKR2CRA9TVsSAnZWagAAt68P/R6bc57dQ5Q011ci21vK\ni//ZVeqIn+gjhqVeYv3j2B5aK2qU3rBV+dwBS9+/i30hFGxeC16HR0CoGYkG\nrbrBrC5Vo93C1haggwldywRCETKQRPmlISxSkPN8XS89+t9Py9aZJrox021l\nfwKsxWuHxAe4De8PRnKgs9IgfaiUlG0bdqNYP+1MCCJt+etBXiQ8dzeecyUE\nXd7aF7/X6sT9f8sqbQY/fTxmhjIWFT5d58XFITlgK0r8dox6UFcrbt0AEVNJ\noiDV5cK8mGB3OA4o6NCly5/A82S8T6NFucyv9qvKquQLnDd62/3zyOIvGnXy\n0vJd+jr4WjW7UeAh7uDG1TP2c0YN1azxVfDMIcHdIXSU35HmnZLa6dJJ+zGR\nDFcIraE3qk+6VgeWfZFgAEIC1WWM/1ze7jj2qpvNCOD1MD59n+JQh46oGqDH\n/3vQ+0yRM3rghnlUS3X/RpSO4nPSYR5bCvTaVHMmd45zKlLWVTU5geqnNx3t\nT7sW47TRL+F2KMbpqJJGhtAVP1QrdsAlrCLIAVufgwTVD2cu/4Z9bZU2DFpr\neMKzvwmky3N9Gvb/6fDmrE7wSX8y817SJbUp9S+/c+Zb4gV/dE7SjMqN3ZxF\n2dj7xjw5SqQ076IJR8349PdGa+fLdcgjFwWBatu+Ikl+pPokoLlxr5eEy3lY\nKo7y\r\n=0Usu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiSyNNDLVGRBPDnO32kZmAwcbu41bkL+vXEoBFXu4N6gIhAJKxsWhmGbPcKyd02Z5UIrxyaUU/0Hw+08GFl60ncOvS"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.5_1536205941974_0.024790804743188843"},"_hasShrinkwrap":false},"1.1.0-alpha.0":{"name":"earth-scripts","version":"1.1.0-alpha.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-styles":"^5.0.1","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2","webpack-node-externals":"^1.7.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{"ip":"^1.1.5","mkdirp-then":"^1.2.0","recursive-copy":"^2.0.9"},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","readmeFilename":"README.md","gitHead":"37a3a8f933097bb11369ee017d2520033621ccc6","_id":"earth-scripts@1.1.0-alpha.0","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-Xq3bMSej/dslOQsCWYtLUoQW+0oVdKbq4ljHqwxVKarv781MP8NRHA8is10rdKey29vURZUECNUPZZ9W2tbNMQ==","shasum":"8bf94b46a0b42b40d9856ac02fbe4bf47f1d8507","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.0.tgz","fileCount":77,"unpackedSize":142595,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbo1ygCRA9TVsSAnZWagAA/rwQAJEvJu0WDPIpyl7kra4f\n3FUhM54EPYtPRbjcGTanPqrYmOdSIn2u9YN8U5J4qJteKWzg8yVF+U3Opsmd\n4Yw+3eGmOp7iRl6LCL1E70Uny3XPymQf3AJA3lmJKzVUp9KXnid2Ai3V4S9c\ncuBzDE3vzgOKF9bHGwMgxG1DImhXPzHGw9y0IcdOxIlwZJXXrhPsfyeKkVIh\noNVHChaeS/hwAhuyZfux1UUO/qRwgYbTg0ieyuP1/Q7Atf93u6AJmnEL3vZf\n52l5jcEc/Jc6Mg7oauSW7FA4G/lC5hV1vGzKxmOGxurndPr7Yq+Ytw9oFehs\nb7aTYoMZn2fgSWqsm/7BJym+GKcwWdpbZOVbYJ+0hFns0UiTwO4AT5Q1Kd0r\n5METLK5OqGA26zt7SYpxp/ySr1Tih+5bJJnA1AhrNCLzT5s6l3KMXW1JRfGm\n1pVewYoeUXPHW4saL/vbMBVxWDp/P1APFvT9kdhtpKPpWhBMBMy8f8cuAjAP\nkVja1myHLwrUOsYs/5e2zhB4EnHBju2TpO7GNFcw4D04dLk7gENAr1+fMWp4\naufahfYqzcdZwXe9OK4qNVQofZ7+T4afHIqNRmAy3QCEjmg8t9oAVmGpVLW6\nA2kOtaB2uOpqu5kuDsx5xZKxOd1xczXKmhQhTyjQ9jV2f+ZOVM6N519hiQwk\nxrR1\r\n=n6JX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDznxQcVlLmGv+q+UhReBBER6R3J6Pv+ufNBig8u5avgwIhAOEGmFbCdglMySSSDXX87eeGzzVGmNn4BfSs80YNiU3N"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.0_1537432736102_0.22752918937257527"},"_hasShrinkwrap":false},"1.1.0-alpha.1":{"name":"earth-scripts","version":"1.1.0-alpha.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"f1242af127d0e4aff3c0e929951969bf89e500ab","_id":"earth-scripts@1.1.0-alpha.1","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-i2kdlirV4IFDoT1Q7paK60u7RxjVzr7yBr1K4OYF7rbOn5OpqaOA1+Jq4n2e6r7RA7UgaQf+LHpKggdyIL2b/Q==","shasum":"bfd20f00e1d02b0cfbd711927bbaceff725e7a0b","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.1.tgz","fileCount":77,"unpackedSize":142749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqf+9CRA9TVsSAnZWagAA/2kP/1TtEIb9WRG6y8eEluJc\nwCh+QrcYc2WNu9AXfXuRGNG43AY68VCEAKY5XT/JboK6b+g/vtiDjSzbOlln\n1nP6R98+eoJnCvR+U+UwUth76f+u9o4CjgVGQ15OQPGgIHwejhya/6b+PYCj\nLBHgTzOAfN5Z4UoKUaj+9gFoU2cHYrrGSs7xqD03eAhn0aK14o3Xi7CCEAvF\njBnchp5ueh5qJyzrLXJtf7VF0I+RQsq3rz6wcZHhaMdgP9kiHpenPVT5f1Sz\nEH8RcJqLQ6FpB0T4gGoxFqCzGPHeiDTfYMI5g80rj4nJOASQks8NY9UIeRmT\nWRxWHFkkNyAjfGCHofK52GUZrEtp3AGGcnb+F5raIeRGztrVCyBMUl0DYllO\np6iSL0CJ3hWB+lUEOxoacw8i8K2I7l3mK21tdjDeRsS7sBBfEb76fv8OPZiG\n527SHShmZQefv30VCV+7WOf3/VHXu3r/NvbRISr6CMQYMdh8gbDhz2QDTziv\nNahlDq/HQxTlKH0AbOrJqdilpXvppMzWNbVTBMzzvJOSHVLGskdcCq6BOkCM\n2Ax/4hsIJbXPW7V1EeAbLE9p3agDpf1VxiRE8rr8xHL6DtIjs1FlMArQeFeB\nrk7dZMTP6b9suKVTFQEv7mfNWHhtvvHajBmCgRBC4ZL37vzfdcoXMfjPEOHv\ntfLx\r\n=7oQ/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBE9o0p98F0PO6Hx3Au14wL91twZhztGG7Kk2yzLWelAIgEyvvnlrjKeyvu8RykxomjC5fNNY3bvY48B+NTSi7WLc="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.1_1537867708715_0.5422580994717505"},"_hasShrinkwrap":false},"1.1.0-alpha.2":{"name":"earth-scripts","version":"1.1.0-alpha.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"4b71c0988670dadef9826063ed1b032ca4f686b9","_id":"earth-scripts@1.1.0-alpha.2","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-3UyHoUhKv9O1iENyGedCgq5m+IevLKPESubD+TokIKKsmxSSuaq5iIUi23J4aIWK/Q/5kDghjZR7PJNg9gdALw==","shasum":"3b92db3d8aa3479eec655d1327078c9bab0db23f","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.2.tgz","fileCount":81,"unpackedSize":147619,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsJtICRA9TVsSAnZWagAAGD0P/2Kkc0w/Pezz2uN88zlt\ndFILbbpOEpPPdJAe44XT0gdT0hFssK5vymLi+VqpCkfd2OQ+2Q5EN/YeKC9J\n8ACukqXOTNczZjn38xyLwbqtZH4DM0a0mDMhzz535geFS26t/OAfoiCxGEzw\n1bIpuCmphzz7ybPyV2KfQqdYW0gvTZR4srN1DbXp/eL4jLFzQ0+2tDUTYbVT\nAewc5EQz4HAVTdkByWnZ2uTIunl0lgXITawYJF1dP8mXYvA8IivRHCqXHXmu\nYX1Mylk90/6WDNHo+pF9NXIXhtlnJryQkUvrUwdLKIHwLsa7xwJl22Pz2395\nj4VZYwfpZn728pBLrbk0KoC2QftKNAmKgyJtN5b42bMqmMOcNQb+39Of6w9l\nchUWicJgknmwYP6RYUF835n/P5zMxkJa47g4RBEIB/2iPcQBRLS7wsBcsHN8\n/M/1JUOA5irjVo3Hv+Z7fnfM3El7uPpQkuSaJW/NDdrjZ3jUO2yEzlourPgC\nrhH8TiWGblvp/jMLqdP7o8wS1jnT+x3aHC2GAamQMeLR2jCwPSma/Htu2df4\neYQ6LnW4YzS5QO+riJVX5h/ZZHMEPB8CVxNEf2zEKF9a+twVBgevJKCb2or1\nUBB0MpEBlJ5JYwQSMKqmeT/hK3ILkqled/pH/WZ7yCSiKEs5+/tE75M24+vS\nB2P/\r\n=as6f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFs6PBioKxqw2MYAhbhZW1ynsDXszNkcqno51tJC6o5yAiEAvC25P1IFrDqkeEGxOXpza5YGy6lLDqfL0FJePjczOAo="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.2_1538300743643_0.9013074130757557"},"_hasShrinkwrap":false},"1.1.0-alpha.3":{"name":"earth-scripts","version":"1.1.0-alpha.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n`earth-scripts ssr-start` 启动server端\n\n`earth-scripts start -- server` 启动client端\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件\n\n\n```\n\ntodo: more\n","readmeFilename":"README.md","gitHead":"201579072c4a24efdc1833f40d9df830bf60a91a","_id":"earth-scripts@1.1.0-alpha.3","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-UIah7ZftIH4ifUAo6r9eNKP4vYnIxC+XH2nMnuto/sk6i14SNZyURhmrO97nw5COlAP3kyGqd3LudTJsBr70vQ==","shasum":"88f20666c1f9dfdb055bfc9a87abb3ac203d685b","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.3.tgz","fileCount":84,"unpackedSize":168589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyDMDCRA9TVsSAnZWagAA5MgP/AjZIzN/cbX0+1TYd17U\ni4Fc7xonXpGGhxkCFyUz9rftZjODoXp0wGOTgk1yJGv8Be/SFpb6ixA9EY9j\nP8rtl10sJuPM5I11nlUruZdftGvYuHlwM3q/1Z/MROl1WuY0n7WUwtUGwVBM\nKJDjRMB1fGpzBoJGFP+5r60TAdpjXw803Vw8M411NkHJwbwuIuNw4yvr3Kin\nj3OoMhe/YumijHveqGmWPJW1monLuXi2VBP0sdSjTIkSS8w+NbXMzaa/qkLZ\nQS6siAv6fr49mp0o0qrWH8+9deFGk6ztt0bbgRMChvPLTVv+qDTLcM42njAo\nEw14hWO9EBc/QcEUM5VJB0DtrzbVYgF/BTZN7AtKTFT6NKCg53cpYTuQYTge\n6ptxETnyYyi7gQnm5DF9NKtSWgMInDWCkE+O3iOJ/8neFn6NrJxvxPWteKMk\nV1AMy/plIRos5XZT+twHrB82yF0kbRG7VW8A5VBPwIlu1PC8T4/3DyTvQtqo\nwt1Dd6Bk4Z+Y9voHJw25WMmRdzwnLx1HHOHn29+9v0VKvDNy+88tqLoOBFaG\nQvGE3kWUQrohhZOfesEHxxHafG6g4l55socTE8U/6oz/Q6+OOOx+4TXS1zDv\nD1xOcWzaGTRDCHx/YWsCkV/BByqlswgI5kXvXtAtWZLlDHXb2QiEN1ZkBjzP\nVtZ5\r\n=JIQh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHlr05ef5pUr+augFHk1GHD86uB/C0U+tcnO2olOVO1EAiAU1gMZR+PQZbpa7/sp9mSc4mafoY9Ix9pyfWKArCSjdA=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.3_1539846914501_0.7887853995205216"},"_hasShrinkwrap":false},"1.1.0-alpha.4":{"name":"earth-scripts","version":"1.1.0-alpha.4","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n`earth-scripts ssr-start` 启动server端\n\n`earth-scripts start -- server` 启动client端\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件\n\n\n```\n\ntodo: more\n","readmeFilename":"README.md","gitHead":"6fce623d24e1b1973c9e2c154ad6a5290604d34b","_id":"earth-scripts@1.1.0-alpha.4","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-zxym6DBJjj7+ab85hH5dxItLD40MacWQ2KDoUGfRA4gr3jGKnQrFsOEviw6XZmP1yaYvucnrwMgX9bR9c4PqCg==","shasum":"778971275a91844f5a68ace25d2fa7a5e04c43b4","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.4.tgz","fileCount":87,"unpackedSize":173986,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbycAdCRA9TVsSAnZWagAAKC8QAIxtcucGk2BVbenm9x9K\nl7pP+bmYd7d9dui900RIBnQG4W54m5dCnwngWCJGFtYAGM+m27Nai7CjRoy9\n2Oj9GShxEY3vQEMwRMADHj14w835lfDDVKez29LzASbtgLviYjbsD9x6+VwT\nr+CwUpEdqNNuXfKRKDFFscZP2WMVoVeT3P+qerEOSLMZPkxATrYNBBiH3rU8\n8t9VyiaFOehDyPN40gibEpKe8jj0Dm/9j7x0gnrXQHJBtAmzQ6gz2tS7419Q\nWKBJSLXj0PjyK6a1UW4Vrjlxsk5y+HkvWw1OWOq7V3oXzUcX0dWKjSaxDSWH\nS/csAxIJuQIC8y82D4pc6L5EqUAW+757v10MdSfI0yD5Oq9FF4gm3i9nQecw\nbHvLgz8Mw9CBWy39jRRvw99N3ce0gZm4+A0tbzVx7gAkLfX+pnrCNqk1Q9kA\nLmYFF7NAn5XoqjA/46+UmfQz2bznruK+7XHv38SZnbOnlNPoNmdiMnEtbwrr\nByM6mKNTDHoT1xJsQCoUDB959QykOHq0EgqL02qdlTcHs1jxc+VcO3s+YfTk\nK+PU8pid/IrOGoITWf8uL5kC30GbO0r0hSJXm8CbcOGLtdLFRSqGD8tndM0U\nmfLU8n9F3PmIOUkPVmnl1DRjOaYTPZSz5LlyhPSmFPLO+SHe6eevQmUVpmhY\nIlyC\r\n=VqcE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdw4foVAphZ4Bb2Y3pAzQD8LUhXp4931uSbPtOWjJi3AIgHrao9Io/L8yQq1rZaqfqfeG+1ADPu62AjgG8+k0KTRI="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.4_1539948572654_0.027052756925733057"},"_hasShrinkwrap":false},"1.1.0-alpha.5":{"name":"earth-scripts","version":"1.1.0-alpha.5","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n`earth-scripts ssr-start` 启动server端\n\n`earth-scripts start -- server` 启动client端\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件\n\n\n```\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn'\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage\n\n```\nrouter.get('*', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    htmlObj.injectStore().render();\n});\n```\ntodo: more\n","readmeFilename":"README.md","gitHead":"299a7ef992a8b73d65a155ffbebaeba356e263af","_id":"earth-scripts@1.1.0-alpha.5","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-M6BXu8nZb83aFCbGq0vT/diOu7F+b57Y2Kd2u00TX0r3wlaLx10Lyfk/fgH1LcGqo7Y/eiHGxCuJe3PkikV3Aw==","shasum":"4e586f74040e7861a564a2a2ba8ef8f9c9d6f9f3","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.5.tgz","fileCount":87,"unpackedSize":176185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzYZiCRA9TVsSAnZWagAA27kP/2qaTuILNhZM8rRJIpeT\nwn+g61sw1Im7ngCZRVdYBWTzZwR7rVt3bx0wx3YqkPb+4NmSKp6lT/1FRNPK\nSCvD9d7J4R3cIfkhvB8eQcVAZl3WN/YqyJhGZHtPhbtyu0M0W3ljv/KLDBNj\npQaeyavTwGM5BAkb7xW0+8jy2/Q561XezY7Eq+v9vZRCZkImf5FSWROR70tO\nurX4ewuOGvriKIqVw3QH19cTwmj0k+uduRlaRYam7qkTaPVgszXHA0dAesdJ\nx07/mpwl0RWku/2+pJctT+ECLgauPIY9FPIRQifvHOSqK1DToKIeL7T4/CmL\nw0JpWeWgaWPn/NQDmp407vWpyYlILGzQc/pm5Xs+KQibOfnaO5BT+b6ReM82\nSvVcmEIRmnLwplIRkHGMIBftuajHy2z9vrexf00+vZoe6YHA/StdbRZjxDAf\nLHvIkvOWgaqSa76zYM5EyxngAwPA66KXGPOeki46tw1FU84iqkhIgG9tht18\nW9Lj032eJOjGZUNGpVFYU1Nwr+BuTo6/I8oVl7fUlGWHPnu1pv6pHMVXmDSx\nzAked0qqfFqm22O5yMxIE6hwf5NaorqlnFO7HSSQYWcPDVcW3m2WqXXa0QaN\nYbCP+6qBFo8mLXZnh56f8U3NutlfboIjEYjGoPsA5g0k40ZGzEyY8hp2ZqmO\n4tcq\r\n=D3hF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwg7D9U+j48KRjIycNg1rfaDhEk+pHocMv4crvi5sOiAiEAyOC6xoObIJ0+F+3cgtsiHZwrEj12lH53dipXRec/qS4="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.5_1540195937275_0.5207555053861519"},"_hasShrinkwrap":false},"1.1.0-alpha.6":{"name":"earth-scripts","version":"1.1.0-alpha.6","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n`earth-scripts ssr-start` 启动server端\n\n`earth-scripts start -- server` 启动client端\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件\n\n\n```\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn'\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage\n\n```\nrouter.get('*', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    htmlObj.injectStore().render();\n});\n```\ntodo: more\n","readmeFilename":"README.md","gitHead":"e036cee2ab73a28896d8ffab523b751aff1c586a","_id":"earth-scripts@1.1.0-alpha.6","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-V7j3kTp2hIEyBA1M6ENrycnOVqcfN1O0o0RkNk7z89dsCO3sMzv5ho0OBr0lbJUGW6fISt4rqerI3DBySqg9DA==","shasum":"05c7872bfac3a2e90046a2b917bd2b7326f718f7","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.6.tgz","fileCount":82,"unpackedSize":179383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0BWpCRA9TVsSAnZWagAArgYP/jX3u2einIW7Bv6dLkb4\n2j4cKtKz0k+u6eYxclbeQA2/0C6k3BHWNXtf0w9jhVE0UR28HrBc063EvVua\nRwegPuCOq5mFwGmJrKDOlQpr8qCTCDYucXjoChMKUuu0flNkBiZLW1X3Foay\nxNqjfqxhiIAC5vcj+a0J9kpTkKpbAjqIwjFTY7MqG028tsZE1kjaZ4aCXVm+\n2ujQq1WD8763VQtnjlzUHs9QcLydXr42U+1TYNKpYFXjqAfGYHH0sUdVy3CY\nTvQHh9DkuPIggPWEQK5wmH4nSy3pCNwfXe5JZ2p3BNDjG7GVmPgiGKmcVuvy\nqI7nNH7pMdJci4h2gU+fJLVs3e0g2n/KTAXtsjQ5UEE5KTE+aF2P/wCTiA2A\n31kk9TY46i/NhFAUlFwRqgcY3Sx7VVJgdM+NTuQYAk9wKaZnLqCOmHEtZkxw\nCnMtHB3wV4QeJbUwc0oVhRQJhNkQHr1TFprYEk9q+BdqSJ4udF//m1ABO6fy\npX8quXxn5zPva7xq+Hu8vNxwYuui5H5N0t2GH1g6pJrivKtPpQBMeg6Uc95j\ntGHud7fH+pb1vdK+ixvRN0opwWIn10lAiBd8mYz5A2ctFKiOtNeM80aY8HGH\nzD1wXal5EsqkIjOMbwsV4AKDE2TYgXu+NJciWnrpLCULuj1qsOXtB64EVtpX\nvePp\r\n=vecU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAD0oxZQlrW5SCdHfSr9KHchuI/keBO9PkwTuCa4ohF9AiEA7Pr2lhFVXHv8Q6AlgOSsHuxN/GfP8aBz01dKcmgmQNM="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.6_1540363688985_0.812549645651053"},"_hasShrinkwrap":false},"1.1.0-alpha.7":{"name":"earth-scripts","version":"1.1.0-alpha.7","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n`earth-scripts ssr-start` 启动server端\n\n`earth-scripts start -- server` 启动client端\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件\n\n\n```\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn'\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage\n\n```\nrouter.get('*', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    htmlObj.injectStore().render();\n});\n```\ntodo: more\n","readmeFilename":"README.md","gitHead":"a4dd9481fab90162bff0e4fd3484ad770289a51c","_id":"earth-scripts@1.1.0-alpha.7","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-XP4Ywdrycn0dO/VETHpbil+LVwD4myGYXx8X6WqsD5WgfaGe51eaHlyq+/jo9UKOuhzwF+rZhwu9pR86XZ1uWg==","shasum":"1ea4f9c2522071d5ac791c9aa823832eb23085cb","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.7.tgz","fileCount":82,"unpackedSize":179617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0TA4CRA9TVsSAnZWagAAX10P/RlVvRa1O+7EbzGBaUuL\nnQB1UDFvaIF0/6bTg1ILVo/1OSdDtSQ40sZLuOdSJfL4d8F7y26OqjbrlulT\n4X8gfA0EHM3FxpSXbNaqL1GWwQg5i17ktX+oHMVNcRpjFk2MFUsADa7Sh2No\nk239AJbSqZS+aanD4SyGT8sK+o8DX5vXg9AV1uFiDPfh2YGuuH5Ky0c3M+Mm\nufVqyBa2hPVv6a1MBBRxNbjMJ14F5q8x4YPlLHqCwXyawtsxnfHnftkdGPV6\nO3cSKq1pN4bL7VwNTTynANNJHJ9pQS82rfpc0q4FYCcSw+/Yuaun0RYXAUJ5\n673J/jXm3Qe7UIKikJoMYu7KWFmalzlDHxVR086vkAWpYzLGjDu1SfV2aZe/\nTXq77K5+C4QQTugsSR0IthW09l7QXzMPva9fkDJLlzclCqDvuGHTEXXZ31Ba\nOM4gNy1cqcHl765SAS4Ovi35ISEDqE3ytdoP1xmMc5EQ5JKW963Nv3MaM+TL\nmRYZ/+er/616fZ1qk4GjMLtUe23GAH9nBfpsKKIWbk+eYVpRk4W7VVqh+JpK\ny2O6aT2EnxREePSVW+ydbbptLNK2g9cLNWyo/aF03j6za5v6r0QXQ0Dsjfwx\nl4PwLt8UsMOjiaqNiQ6mF2nl+Xn4p0yZKZY7MChBCnHKfVMzOqvRxGIyYPng\nUccI\r\n=uyUa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAHOdtCWO+603cWoExuVr1hhNn8Xiuftc+fNwCA8wEBzAiEA9aWQAWIiB6sI3NRwMLs/rUM43Ks+DId8Q3qPEcSo8LA="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.7_1540436023252_0.2654852909581402"},"_hasShrinkwrap":false},"1.1.0-alpha.8":{"name":"earth-scripts","version":"1.1.0-alpha.8","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件（config,online,offline里的内容在打包时会复制到改文件里）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst app = require('earth-scripts/server/app');\nconst env = require('earth-scripts/server/def');\nconst http = require('http');\n\nconst port = env.port;\n\nconst appCallback = app.callback();\nconst server = http.createServer(appCallback);\n\nserver.listen(port);\n\nconsole.log(`custom Server client running on: http://localhost: ${port}`);\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn'\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    htmlObj.injectStore().render();\n});\n```\ntodo: more\n","readmeFilename":"README.md","gitHead":"123c306982a452989385900ff978c30a0459736a","_id":"earth-scripts@1.1.0-alpha.8","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-5edqgWz5Bx4BPBaHgAjKXVXBBZj1MThrkrWfnLLVUL6o4oxMLoWXJsM4gL3NJCm6uquPcY+jVYaxFfYqwQ0Z+Q==","shasum":"81a40a3c811bc9108948532e348f591a4e18b9b3","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.8.tgz","fileCount":80,"unpackedSize":180250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0sPgCRA9TVsSAnZWagAA43EQAILTb4PmxNnP0L227bNw\nr8EN57GFNSNVfHifHVpIXmG0W+ANLc452fFeWKeg4TzbCymEEJOKboIuBGpn\n2cAkUMiOiGSXd0DP2zBkS2Ss+Tn+VamZLRCB1flmU5m5Cf2f4fadZykDxif0\nXVjZMb0NFOqNxWx9K4xjtCnMqxIL0pX+a2fmYHWw307sbOastpXCuY5t5j9D\nRyh8+54RRZXyWYFw337CSDD2fgbdF76Iz3blTndX7lkYy/H6jqN74QU6TvXF\nPgrUHs1U4b1KtRVexe8F1DP6xDSfkqdsFZww8A67NT9dWyXBSN8S7iJgKRG9\nTwjkuN/6VVDbcdbDSCY3tqPwzxHfjerCTpsEc6787v4q4PTaMPvJtRBKvWXF\n06GFuKJ6LqulfoTYXXUqDRWE1lUA1ZqXpR1OOxbzqY4nQOzmgswqWNpvVx2I\nzDR3IPB0KzFkmHYj9TKx5RdSA4ZVUxYNhBlnFeCl48Uu21bM21sfXxLQhm/K\nlbd48L4k1HdbGYlODclYiDCTidCBKRxQIAxgmo4oBPmDY/ZnDMSRm4q+Of4l\n3+UA9OfMLloJv6wTdL9kC0r/iyI5kSrrkKzOTuR2nHUl6IhuOfhpYWGtQW6q\nn9umPgnR67J+Q6EKq8AO4cR1JmHcltzE1YBETh/mrZ0WHWYaGsPCqwQUXMqz\nmpgF\r\n=Vwx3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9URnG6yPT19AeLfqIPzAOx0tBKZoJkZ4w/GfcB/+vXAIhAJoGVEhxCoLj9dQC51dxwBVkNM1qdIJSYPElAt69FaQP"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.8_1540539359717_0.38700807186542496"},"_hasShrinkwrap":false},"1.0.6-beta.0":{"name":"earth-scripts","version":"1.0.6-beta.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","readmeFilename":"README.md","gitHead":"fe722a4082dd4ac27bc4a79521a726490ebda5f1","_id":"earth-scripts@1.0.6-beta.0","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-ZIAUKDYNPTv317Cbueb8Br97K2DOKDOYV5KBneGV3C7C6WvsfLYtGVEy+FR5lLhD+M9mBT/7giUIqy3WDK2fqQ==","shasum":"93b9d53d59e3ba0c1b76706ad8f8161898f6ec39","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.6-beta.0.tgz","fileCount":41,"unpackedSize":101729,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb3+OUCRA9TVsSAnZWagAAjMwQAJhAJpeUPUfmmI676uNW\nRSoYoIpOfWIoRgdzWq3Kp5q4prRgwoOtcCRleImYK8wzyuTCNJIBIeEaiC/6\nL597YalaE9alWMbepes3hgoyuHm6KxUfndMACZ2bkdAovqyxV3to1hVgVPr6\nt5fhXRs2WdOYlIyOZHusyqfPvmKbbL5ceE/ve/+gch7ZsI385Ut6iMgSf710\nCaUf3EaGRHDM13Cw1o9m6X5xvXqxQoR6ufVitbwCO4tWIO16NHWgOz5R5PIn\n5wJLBT3s87b09QB34mR+gx63ivIcaNDfxdhsGdJwwu6psHF+Ya06UF3og3/r\nOLV4aXpnDi2GDDcbK4JfAQu3a4IYfNWDylbXkCH2GQAJ2TwF//TAWPCorjF6\nse7aHVUhJDOqd1HHvEH8D9kUbnGdF2zO7WkRYU5lpGfiwhziUzP8vYFlcM/X\noCdQXA4nsUL8oYCrH5E8IvEhOcFvll+ww/3mCQnHgKHdfZkMoaGa2DaWX+gd\nlEvN3StMFY1EZzgcVy5QZo7s8/Rh0jnpCeIRRrhykeIVcIBpzZ0GaAuhSdvL\nH8GWlxfZN2ACLzrgJVQdDmIanvxsDQOySWG7N2EB8oW5nAWd4CB3iyXR/oIT\nfhq27dcEO+Lkkxw35k/PfFHqjGqw7K/fu9H/7JTiFdSHFFjLV4JkUJXiSqF1\nTS9X\r\n=muFI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB1XZj+iTvfT0QOg9+2hW2o1/xaBapk8EnDUAjSbbDCeAiB+7Y/MM6Pw23wg91ft/jEr5oxy/obKEdU8MaJ7eDVYHg=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.6-beta.0_1541399443246_0.037405874326207345"},"_hasShrinkwrap":false},"1.0.6":{"name":"earth-scripts","version":"1.0.6","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"75c6072c56b18caf2d0d255629b7725a98a48f04","_id":"earth-scripts@1.0.6","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-oV1LiLqygGeTiEppzF5FpzTd3SBT5mn1f8kZmiJ1ljSMAhi7IvPn6PrHe+xtwa2dBN6vT+PD/hoOpg69szppGw==","shasum":"6e166818f4fff057cd567a8b34f93dda6f6cb581","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.6.tgz","fileCount":41,"unpackedSize":101722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4DPTCRA9TVsSAnZWagAAmfAP/3fUf/rDs6CHRWKA7OWv\nS+SSL3f3HqsQ0dA3FDuPM8ZTQXeViQKAWTt0B20p4OO1PeRdmhZhz+23qEwQ\nIfF2mYcheF0XJS3/FEra1qt1KzQ/2ElOh0xedKn3TYTX9ICpfZ7XbuJ4emI5\nLqph0liod0+LSQlY7u3gz1BuOJqpBXu/o9TDQXch1mAjTNs5A0mM4xvVKBe5\nmQ6pIqicY9KnB1b+tUTgzLji19J5OS0PIxEnHX/gol9Lr90DBSPjWqS3g/Q2\n8TzB5Q8i2GGesNP3Xd959LLqePcV4tEAAjStdEX0xhupXT6emaITEf1GyGQy\njXuU253TWhFzlvWzEY0LFV4TSV7mth8JoT9dvA5GRi37Au+7RTEmW7Csxbhv\nifH+/572hn7JZ6jh6JAnL2uHdrkBy4tlX6PI4WOITVYhKJe6M1pB5AdyEPQv\nH6+XbLAks6NUCm1l/8/YNZQt/VgGr1XFShg2VlNM+pjNijKSTImrVYwIxHhT\nCaUdgFSQaU1IdkHkoyyV70bxK5QsURnE6voDFNzFK2lTcXHz5RhM564hL8ol\noIm0KiwlU00/UVo9V7d2I6RXsVoLT4nzNJfafho4GvwFQUZ8Hz38Sdi/J9by\nyYrwhjUn89tcgWkfpAfcveofw6UFjCJkdAs+kmvr62dCSeEadupmVSHR60UW\n1i7y\r\n=y4I9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIALdtlmNQ6hnykXzvo4AJUHY5LfwZqw1LLJlRyTb7oPFAiAr5XrVA89ZtCk/dJf42fhQyOd/zSP8B8CAIsKpIZLGtg=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.6_1541419986694_0.013029250051512342"},"_hasShrinkwrap":false},"1.1.0-alpha.10":{"name":"earth-scripts","version":"1.1.0-alpha.10","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件（config,online,offline里的内容在打包时会复制到改文件里）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst app = require('earth-scripts/server/app');\nconst env = require('earth-scripts/server/def');\nconst http = require('http');\n\nconst port = env.port;\n\nconst appCallback = app.callback();\nconst server = http.createServer(appCallback);\n\nserver.listen(port);\n\nconsole.log(`custom Server client running on: http://localhost: ${port}`);\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn'\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    htmlObj.injectStore().render();\n});\n```\ntodo: more\n","readmeFilename":"README.md","gitHead":"71ddbbe478b4685dcadc5eed8ada1420ca9567fd","_id":"earth-scripts@1.1.0-alpha.10","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-S/9WOlXzmiOMvXqacPU/IAPitDqfJHO9d4EWhVpwrIPF7njCEDFuVm9oRSCQLDyxHICQKHTSNPDdIkrstrGbDg==","shasum":"60f27d93a51a93e9faef0a5bc8d73623b919cc0d","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.10.tgz","fileCount":81,"unpackedSize":181158,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb5lTcCRA9TVsSAnZWagAAjasP/3JctgxPKnCVWtQ0HnOO\nOnHfCGtZtZOtRFbnew5qH9kXMoOiWcfmU9ybGoUe2p3TtcP1WNN21QjIB2eu\n4XAMXFpYubJ6ggCrj/0+xU1DAm/6ht1adwS7LFwuiKTfJsFPEmgJpzk8iOiq\nmMD27FLnyHPVvC5s4ecpxEprZTIyEJ8Tx5J2aYuQlFUFdoCbtKvBddfpqlND\nzHovOdV98fSkZn6FMarEMkWa6WG5Y6pBfx1ZQpF8c/9OKITA8EfWyLOyptPk\nU23XVT1v3DfOOfpqbC9BI0lUycEN5gx4OLECXru15YdXlvLxW6Zw7usLnbVa\nFniORDJujFo2koV9eYEScC2CYaWwjo2LSi1GdPrqaAj4j5CO3qmnEq0cI7n7\nnicVdo/ZvDly3GUye8UrJ8HphG11TY3fU52lcO1yJ4+sEvPKMFoUKP5Y+tB7\nWM3OCTjMvuK2SHx8y4Ph4eipbsT2yf4PM4YiFSjBaHx4nn2FZoAhP+PHGoBL\n+8lATqPO3lVJOnKspu/EkxFmjn930+W/KRbTvEQ3ecZwsNAd0q7O+JWQ1p+i\nDCKFvUm72ccv7MPV0RzE5y2k6LgA+JypD81PJ/Das8eiXWGybJeNewBl76l9\nAPGzNtYR2Idbkn2pxE780BLGMgZcoCuWwFaa4260pN0qmWP4IBVHhoT+ElRz\nq5Z3\r\n=bAiW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiIcpvCqq/QOhylrixvUvUW4sGOqqnkFy7cXXvkGJvMgIgIuK0U7ACbsWksdnPqyc5Wy8VFvEwKzbAzPO6WQtPu/w="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.10_1541821659269_0.42871940335412106"},"_hasShrinkwrap":false},"1.1.0-alpha.11":{"name":"earth-scripts","version":"1.1.0-alpha.11","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件（config,online,offline里的内容在打包时会复制到改文件里）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst app = require('earth-scripts/server/app');\nconst env = require('earth-scripts/server/def');\nconst http = require('http');\n\nconst port = env.port;\n\nconst appCallback = app.callback();\nconst server = http.createServer(appCallback);\n\nserver.listen(port);\n\nconsole.log(`custom Server client running on: http://localhost: ${port}`);\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn'\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    htmlObj.injectStore().render();\n});\n```\ntodo: more\n","readmeFilename":"README.md","gitHead":"c7a7e9b49bf14241c9bf0dc44e33d81c024668ae","_id":"earth-scripts@1.1.0-alpha.11","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-0aIRNcKVPTJ5q1pefIN3O9jQuk19ku+STxLliMFE7K5qZTaZlDknbnYLEHc9EaK8BVlf4f8lh1+J6jdIv81Wzw==","shasum":"e300fe30574b298546b4050bf771ad362d488f20","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.11.tgz","fileCount":81,"unpackedSize":181158,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb5qKDCRA9TVsSAnZWagAASx8P/j+/hfmqMwOPw1OQBXuW\n+fwr3Q+GtMu1kL06AzHzhlVzvGEyev4cV9vHOU9HCoaq7kNhxSGQCtkX+aFc\n+9UMsl8pDCKkAhskNbH2ypIFvZgXdp6O+TjqHII3sEZhGuymW68t8j0cjmdE\ntt6HlsZ+O2SPkFH6WSIACDjbsd0fNsIZNwkk7PSulor3+2yXeNndWKzat06R\nNJPxGFOrHitoHcdu6hu27Fpnd8uJ5SJwPMSyIEYsl9MYkl5V0wWUzVSqPRdn\nWIv9OTWzfC+1Ev0Bh41y5lIw0vVH2axfQ9Wfy4SRNna6bkmpXFkqdTTnLEy5\njfMuhWBW7E7plmGKBIv1AC1/JtIVpPf4ZUS+q9e7PLujiJZnv+lE+ccsPYF1\nT3zO26TLVND/EFR+TdUBAEPHcG4M4sXZHu1gU/YxrAVlNyKCnoSRe0SejI4Z\nLgd+Ev1VuR3SYxETPk6woKt8eYXny3g8xr/II0fLwfuZAiRNIvXQYBHQQbd3\n/bZcDqtkhv7Jz1oJVxooxcmxM2Oomu/a9MueIEqPvBhGSHFTDJfQhxoajeO0\nA26wG4MgluUNqy84St+qVtaUvmOyWV/UFBUgtATuz16tu681LkPqEs4PrbPA\npufjAFsslTVmEqKSUb9UEXGEHR4zN7IIzpMw5DfiamW6+fr44aqqIwO/B7P/\nw573\r\n=/72G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHlYGnrDehSYpQ174iFyCOMjqxE/XW5yZLfNSXAxEPkHAiEA0+xM+tuTMAQPltE/Z/RFCgipMfyZyx6K2r5qCKvJ0hc="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.11_1541841538905_0.27781455903024765"},"_hasShrinkwrap":false},"1.1.0-alpha.12":{"name":"earth-scripts","version":"1.1.0-alpha.12","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件（config,online,offline里的内容在打包时会复制到改文件里）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst app = require('earth-scripts/server/app');\nconst env = require('earth-scripts/server/def');\nconst http = require('http');\n\nconst port = env.port;\n\nconst appCallback = app.callback();\nconst server = http.createServer(appCallback);\n\nserver.listen(port);\n\nconsole.log(`custom Server client running on: http://localhost: ${port}`);\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn'\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    htmlObj.injectStore().render();\n});\n```\ntodo: more\n","readmeFilename":"README.md","gitHead":"937a658cb91489f4eb1ab7fed81efe513310b744","_id":"earth-scripts@1.1.0-alpha.12","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-CVHfdE6gJPp2/Iaa9o3hYhBrwGc0bzlURBT19o05FEgEiWe8OTKUZFKcjj7adSlmbkLek6H2Oyp3BLORKlL6ww==","shasum":"652cd176685d96dd20749ffe004cd3e501a90372","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.12.tgz","fileCount":81,"unpackedSize":180443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb662OCRA9TVsSAnZWagAA8IcQAJ7j2xU71eQwTuu0Sq8i\n35DAr2y2aDaRViZ2LQE/PRJRdpHCYrQZ/tvmHcjX+bz7gCJrAzuY3mzTpHa7\nB7I8YgtPUv6wDQqPnwG8aaaG32yyaaJb62SwfKu5egXNwA7DVfYbnbM23551\nnOQULk8G3b/rK/GQnWDnwiUdUXONsO9WJPFqpbhWrhT4nXhm1ztt1MFMlxpC\n6tMmAh09B3/MlDqAdkXrQO96WmQeKXzssMpvqUxU+Ft1bJsgiE0D/ClhytZS\nxhFgV6jR4/V/Ste5eYqv88IO3VwAMrlFw8Xz7W4CcCCkapAVXICrJrj2EM0p\n0lf/vGpkViH0/xiPlWu3GMFRZhwzaNU8DfCB30go8YL0ZUl9mJqbxJxlBpBe\nCfFo92LGJskc0aoyx7dhZhtgbubxcSjPaR/aKKbG/SUjhxF0lQer7TlqxOBq\nRXgCMDSTJYceesDPpZSZQkr07SPrtls5SELlChbA1NSMXzZpr31LhMNrQHFP\nSWB6Il3p50pmBdXl+chhqLX3f5cH7tpj/mxpK7i1ZSan8Uqsd1UvlrClblLC\n2pdycb2mW59+rec8eKWejpSpnup+z2Cai6p3B40DZBRxthYoTXoZoHFT/fWv\nBHuVEc+rRrVvd2vHrcTxWzDjT4u1VPMxSl/yR4akgwzl1kf8a6tDj32fKtnn\nkeK6\r\n=zdG3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDv7xbtt4EnlKZgP7IvV9JQ+8kSDQr/yuV7X/8Cu6yN6AIgRgQuk1+SvmP2yCIjZD4EuJMnRXZZEpTNza6KYsPgkuI="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.12_1542172045421_0.8822060446266187"},"_hasShrinkwrap":false},"1.1.0-alpha.13":{"name":"earth-scripts","version":"1.1.0-alpha.13","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件（config,online,offline里的内容在打包时会复制到改文件里）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst app = require('earth-scripts/server/app');\nconst env = require('earth-scripts/server/def');\nconst http = require('http');\n\nconst port = env.port;\n\nconst appCallback = app.callback();\nconst server = http.createServer(appCallback);\n\nserver.listen(port);\n\nconsole.log(`custom Server client running on: http://localhost: ${port}`);\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn'\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    htmlObj.injectStore().render();\n});\n```\ntodo: more\n","readmeFilename":"README.md","gitHead":"0777f4cacdf75ad72d8977e561872c904d95ebcc","_id":"earth-scripts@1.1.0-alpha.13","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-7ycFB8Shk1KxVPXUnZhPZDXxEsHjswhi983msPtdr7cil+d9vM1pzbjlNBndMO8o2EoS49OP43kkXh8H7AtdMg==","shasum":"c8cbb3a6aab2eee609248a8a7633bd9166fec0f7","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.13.tgz","fileCount":81,"unpackedSize":180417,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb69hhCRA9TVsSAnZWagAAIFwP+wcNE4KbYhBDMWWcxDdN\nRBpsLrz9+eodmfkjgHHar/9bqIosdpbGtCU9EP9PozIlw/+KMWWuTpPjwY//\nZ+475DgtkHdIRIfkHMHldrcQWOAUyOflZte7bhH1Gdb/VKCmMn4jpY40XEX0\nq+rIzsJ3GXR6yLFs5l9zuPdi5TCjEqwB9RneP+MpFupdhmwJ+wkGYk7DwFBf\neeTh0CMc8LPqkWr7T9vnl/Boxcb+O3C3pxJo9jSUs6Dv05PwICMy+98G9w5K\nA42C01X1g+hvg4zPiFi4la5KMwoekXcYmYpzHKo+fNSyVxJgfTuZB/t/fIO2\nnDPGyddMmAoktXyQjp3sNX1n/HVTNsCYaI5oUpGCGOr2T4nfsMY/CPqkTwCG\n8uMRa+Yfzw7L2TTKqrl73Gr7atJtQNFcXpaYXpO/2tNosnk/aZSR7cj6238R\nU9AVA6PJSHgc5EiQ3Q6rWsQtbE14mezwkNcrOspHhNJJNaj+Ho8ZgUg+hy+Y\nxP/FvPraHRWg6/nkvH9rsK5TK5uRzaxpm9TbUCcueyuQZ6nFS3tsqtLO6cgr\nyIgo5POx8OfqwyComE9AT5BUR1YuigbkSjZ+bAcRxS+F2FL/JGts66JUex0i\n11WXjdu4WgkznoEouVq4tNa6VDpnk47VaQllU3Se9h6QKd5fm5t5ixiDb9I8\nMsAh\r\n=PvuB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHdDaQo2wGWzDvvb0M0V/8hlRm+5NKbNUlzZz5QQNKvaAiEA5diAWXFIuSR6/48awzzPi+i+HA3phOFJ47sShzRrAX0="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.13_1542183008529_0.9669448561160967"},"_hasShrinkwrap":false},"1.1.0-alpha.14":{"name":"earth-scripts","version":"1.1.0-alpha.14","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n  - def.js    配置文件（config,online,offline里的内容在打包时会复制到改文件里）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst app = require('earth-scripts/server/app');\nconst env = require('earth-scripts/server/def');\nconst http = require('http');\n\nconst port = env.port;\n\nconst appCallback = app.callback();\nconst server = http.createServer(appCallback);\n\nserver.listen(port);\n\nconsole.log(`custom Server client running on: http://localhost: ${port}`);\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn'\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    htmlObj.injectStore().render();\n});\n```\ntodo: more\n","readmeFilename":"README.md","gitHead":"1cfc24521f156c3989ed2aa31464f3677b2404b9","_id":"earth-scripts@1.1.0-alpha.14","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-67FbIRIB2J/JYdh8ZcWCZa7NT+AYLEnmAawNXhjo21+BLtB2TPjwJEWdHc9BGIzrWHTerwjqGXpv3Xwk/XP+bA==","shasum":"561d45f6d1ff58b095fdd93917f664f8e18f83df","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.14.tgz","fileCount":81,"unpackedSize":180450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7l7eCRA9TVsSAnZWagAA3fQQAKDgCwIaJY9jUyidqlKC\n4mkstnzKzI/NIdJEVcZyVmdS065YbuK6NkFj52NNdmR0SWS0JNRcTUlyhDqp\nnytR1OXTDs+veMimrNMLaMA5/PhkgT/FN2W9E6pEkmobxN40y0TM6LRYfBl+\nJhSqcrj2vdrPdzCerzwcLX/hcmLCUrEZ0eLRRiFSAGso3g/rk5OvB5q0RxxI\nMJcyhrBNAm/TYGaPiKg4JxkUZdeTXWqO1nEZSH646+Lm5Q0QMQe/DKwxZih/\nzpyUm/hGNBSIKNh8VU+xHbZyiqVLw5vqcJrgxDWKiFocBbepq+L3TCj6zLlt\nAPI72qK3kd0W5V61gXHyVEjudPHg+bZt3JkrxXaUYb5p8ZLC6piKuDSct483\nZeLedMI+0qSNj7zRUmyqZ/Xht/AEfZedhX33u+jb0Eh20OCOb1X/HvUZwP/a\n17rBijZE/DsmLOzQA4jq/RBTqN5FZ0QcySGOlzfM8CosxPL30q64fCAKk5Da\n/c4ydtWjww1zxxZ2nzyeqmwSl78Us1VmSfgq7+Kk3tToKUPCgzBS2IDkFC1w\nLq2JFZ3Qhf+hjdI6MiK5LC+LjcfzO8rDcPr8zG/Ibrn7WyT3kWUZR7qCelm3\nggUNNk3fNLQdFpixT/o4R/EZxMKKZf5HH98oeUtinp5DhL5krsJ66WNhmY9x\nfAGT\r\n=2xHJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNCwNjxJherV4kOaXIynbBWIhdddyk8I6X0HZ/ELFemAiEA0Anc6VplAfHleKk0AXBgZwvDOqV5uwveb09iLL2klzo="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.14_1542348509925_0.35599356487052636"},"_hasShrinkwrap":false},"1.1.0-alpha.20":{"name":"earth-scripts","version":"1.1.0-alpha.20","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"7.2.3","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"4.4.1","eslint-config-react-app":"^2.0.0","eslint-loader":"1.9.0","eslint-plugin-flowtype":"2.35.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.1.0","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### (废弃)dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn';\n      // 为true可以拿到代理接口的response,可在apiProxyReceived中做进一步处理\n      ctx.app_selfHandleResponseApi = true\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n","readmeFilename":"README.md","gitHead":"ab8359a4487ab08cd711d97b65e1e95d2a734b31","_id":"earth-scripts@1.1.0-alpha.20","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-nSdKO1ZFvTHU2UhwHA/Whn7laRUeSdOkhSsk7jab4pkOaGgUl24D9B74/iiJhs9Ltt1cjWCMwOxKsstyl1lO1Q==","shasum":"0d5fc7d87598431721d53769dda72caca7a2695c","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.20.tgz","fileCount":83,"unpackedSize":185919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/PtTCRA9TVsSAnZWagAAw4wQAJzYmWT4VqU3bIyTI//v\nDFW3CrDgLgfc/XTqwUojluW9vSDEU4ZrQyZnPLaTdCbwht8nOM8HJpkzNq/Y\n2vLhkli56wPf4hoJFCdkNSW0qddzqbNJgNdMA8cLI1i8D3kAYeLdVyHSQOQc\nfgGjYeZOTkq6K8aPCcKm+wgK1zknIbGdXiE1gO71XXPLVGTzkcu9CNFmZF/k\ntr5+T/X7sOgAOkbEzVgkH6kxO0wO+PniKFaowq/OAWxR2sni7kW2nUYXtJN2\njIyqzZbQUu+jsPMK+uedpt6NQvs8guf1etaXZXDYc/fWh+3iJxGGOmxPfOZy\n9Q1lqIC2KNZVSA2D6ec2HI7UoEKQuN8MqVPwAIViWxrapwI2no9rfyhl7ASU\ne9Xc1cSm4fInmwQYZpa6t2Tls2s6VIn+xLVjOTUBBD7vcCpvR6nVyF7lA3r4\nuMTZ1FEMu3wV9c0YpwcIBuwqTiB/W230Q0k8cjFLv5fo3huptq8wDFnGB4+r\nTGWOgfBkLvyFGU39tekkbM/VPqmZ/OgRaomii6EbXugpipkW1vpEl1QG4jAD\n5T6lL17TfIHSPpgHHuVEFAMRexFCSi9aRsohLUtpHG5g6yj0/6cSaGkJL0d7\nGd5S6w3HEVZjsOAS1TajkM1x/Fxbu/w1MY/szWOBWsCpiK5X5vJfUMTkWIMa\nxlPK\r\n=mRXv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEr/HuwC6FczW4FwvTdVQUqEjLuDiX7CXyTUi15PR7+iAiEA5gyt68xfCjASVbez9EbeG7GbzuLQl8w041v3DFluJlU="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.20_1543306066061_0.3828386208771972"},"_hasShrinkwrap":false},"1.1.0-alpha.21":{"name":"earth-scripts","version":"1.1.0-alpha.21","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### (废弃)dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn';\n      // 为true可以拿到代理接口的response,可在apiProxyReceived中做进一步处理\n      ctx.app_selfHandleResponseApi = true\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n","readmeFilename":"README.md","gitHead":"46804d806c62806453dfd0490dcf5e638c5a53a9","_id":"earth-scripts@1.1.0-alpha.21","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-ga4U9CIvp0DJwzPFs3CvHYQuaNjTCmkgwMGOWC7lz+CiYdd7HhhNfh4E3RHXRhYOTpRZdzWGAAcb+32GSIwLsQ==","shasum":"5333c15f3cddf6f09048cb7da8c9de67ec01edac","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.21.tgz","fileCount":83,"unpackedSize":186118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/SnZCRA9TVsSAnZWagAAnm8P/2s0y5xn3jU8oOd68OHI\nRxNVnJn9WFhyV0D62q82y/nsCLbyY6HfVCqricvRBBuA4VlVCWclwyuK6iai\nSq5ThCqLxl46scCrSzsCvmurSN5Y/FtVWO1078s1bZGQR6DtABiiIcNMpm5T\nNjK6klpww5GOAnC4huw4uLYeC6UYe3MqurLRL9J1M7TtAUw1F0hXYgXzvsVA\naFp36zVeHhjW6f6rqB4uyC6U64R/V06JCg4PvOSD/HxEk2sqwbqv6T9zZewK\nF9Un5jRQFihIjJRqF+iNQ2P79Z42l8KylJHpS+LVZlLYL4IrccJV+J7p6zI4\n2dAgUDeODiHXPGqVdFCnR6CRNs2U2AZooZRdngHFXLPZZtctfLqgCI6FK/Bm\nCowTZJ1aj4bSnsz1d5pDD8tBd6lsKQamqaf5+KtfMgpBvvm8sFb0u4P1I9GI\nBVWFztMmukaVqyr2nUgrBOvRIAhDzWim5+T2mtTwYRfHhbdWaAGJil8Jt+31\ntGmna7xMtYwxUGY3UXAHK9kxgcDlb98ErlXtcaNfWOJDBuu/yXNE43DVxqTM\nfpWo4c7x+Fl8BAZLqCK0SJRrMNbL/4QGszWBkiWSctsr28NGGMFbqQGsz+6B\n4VM8h+2SJX39OdGMZ5MnJXMC7gYVJPIBjyIOC8YA1ZDDP236GIRV65So4lXC\nRK3R\r\n=eqWh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2MRRdb8lsDUCJk2jv0oWq5t+hfCuU1yGOO0/FNML5qwIgBouoVmLmKoe/p0IcwR3optfZho28nGLi5mDsEIv0Bv4="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.21_1543317976813_0.507877277377246"},"_hasShrinkwrap":false},"1.1.0-alpha.22":{"name":"earth-scripts","version":"1.1.0-alpha.22","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.9.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### (废弃)dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn';\n      // 为true可以拿到代理接口的response,可在apiProxyReceived中做进一步处理\n      ctx.app_selfHandleResponseApi = true\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n","readmeFilename":"README.md","gitHead":"dee8de884b9d0c4cb8aaea5f0523d36eea07784e","_id":"earth-scripts@1.1.0-alpha.22","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-5jZ5eRGV/PtnLFtnvp4mBFNxd3sPFzr/uvimNch5ysnKHkut8nMpPFiTnnJY8+WlXMCVJw7b/xjEdgNX3B4kYg==","shasum":"b28a254e85a7a37072c8c1377508766f0183cb98","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.22.tgz","fileCount":83,"unpackedSize":186162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/jzKCRA9TVsSAnZWagAAI6YP/AxA15V7ajjakycbWmjW\n+BWR/geqdlJ2SKNx7hjbXdjMqxAUwKOUyAHyMRUKoNQ+KapaR5VyUynVeofN\nzGh7bk6PhDuDw81REod8Ez8ZQQyO0SQVE7oXybCghI/dSQWqSiFMe4Y1acB2\nB1Tvq4bhsZRDO/IcXcWo6O24w+d2hSgAhIzupratAm9nARiSKqYiroUgSVzL\nBGSBiZSR1ok0O/upZpvIlAs5XJSbwvLp1qXNUz7QX0spY9aHjEzuK6WQLiTZ\nepdmFyhmSDEtENDEWU6EYcVPRGpn3saLOEhoCI6Yh98v3/eHucoOj9lsw+Ed\nNsZ3Cy0EqiMi8ZUFpk34r90p5hV0UB51khczynswSVqa3lKzfRjN7+DY76xh\nIS/YuzBq75BWdlaNKkWWDwWEI870LtTThH/GdinOiOXRovrSaK1s8S3bMS4p\njvOemH0d8DJwRYEYaLRzOX6/xdoccCoWJH7V6/9nFNq0fq8ZXRtkFqSq4Nhd\nWGEH+cdpNdNbuiXh7Z/FJU6qbSbuCp2AapqVMTI4kCcm1ovqEsCXVO6eP/4l\n5eO6XCk1TXRenhw7otyysBAjG8tDrgDbfTqjd8civV2aoQejf21SCCoxONgs\n4cZWFVdB1LKTBUGYd7cjQlcuXlfpk+NHVf5AhE1CnuALsUsr9qmKCoQY/ZUe\nCcQw\r\n=MaK4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBrDpz/RdEvuazaJhSKmV4GC9KT8/7VYcIrJRo9tzAjSAiEAhybJWiKrSizCDNZV8YEVQ9+A7G1/+ueJEQSIMU3HvjU="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.22_1543388362429_0.5567485682829472"},"_hasShrinkwrap":false},"1.1.0-alpha.23":{"name":"earth-scripts","version":"1.1.0-alpha.23","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### (废弃)dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn';\n      // 为true可以拿到代理接口的response,可在apiProxyReceived中做进一步处理\n      ctx.app_selfHandleResponseApi = true\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n","readmeFilename":"README.md","gitHead":"dfc1c78915fde529a10708cf5770ba0c16932a19","_id":"earth-scripts@1.1.0-alpha.23","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-++ASnCrjgJeaZHxeCHZHEcANlilt646g/zGtCIh5jo3lxa1PUkcV8z63FUHCw+YiL0pvyVI+q7aI+8nPKPEOpg==","shasum":"8018d1f831a83639248be613e788d4ebad0b57b2","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.23.tgz","fileCount":83,"unpackedSize":186161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/lf/CRA9TVsSAnZWagAAb1wQAJykGxK+DYJE4lWjoA/x\nGEtaY9y530VBczkTBNKuqYCH7xSZivI5QAWO58xVTLJ0pOwoMJWXREctnlVj\n1X4bHKFzxR8QHSwqqOZHnQbV3XrWJZPWaQ9LIeCpGrfa+KLBzcWO8mMJvtCe\nC8cAwsqHHtKFZWneCUPXpEYYSka0a53g6X9y1K2xr6y0+Y8PnUsNL9Hq4bL/\nqpsWO/F2d9S9Y9xsyPeBWzMSeTHsjRQ0ey3TWaW7Am5jA09p7zdJn9oIlV+6\nRZTW5wGbehFI1CJn/C7S5v/hCl8fmRXj6amwvEd0aPgzlaoc3pMaGKs0Jhgm\nJYRU3pu8jv3uWjR+N144MxiwuGe82qPeyncDsxyeTCD4C2s8p0dpaaT4BkL2\nuFyF7HNGXePgMnwTDiTMaVBncZ3SawwRtUusz7nAZCaiepVpfDPQaPGI3TBI\n1MELm3IuF58YFZNuHbTvUc57FdSoiGwYjId1zNuYJcGjRX9OEA6E/8gLDpXg\nm5yNGmSk+izCQma5P9s3PKGLm0k4uX9Jn/rU67C2PzDKDyGKCzTIjLHGbAAs\nyImGEzDCRcYi5+wLpn0xRnklluT4gxsJ6ZM7zsoAv2Mhz2/xaXWhuE+U3Rnz\nJtBRiF4smivNPRawICW98tUnhsON4YLpxqpizK7cQN6CfXE19SCAUNgfzuBQ\nzHvF\r\n=hNL3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhlMc5yvxkIIGOf3jo9oXFxwZIqbQvAg7m1kARdCmdbQIhAJRkCyFAKpDc7drbDu0IQ4AGAQXNktSjwbC8SmCleOml"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.23_1543395326526_0.985368508205267"},"_hasShrinkwrap":false},"1.1.0-alpha.24":{"name":"earth-scripts","version":"1.1.0-alpha.24","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn';\n      // 为true可以拿到代理接口的response,可在apiProxyReceived中做进一步处理\n      ctx.app_selfHandleResponseApi = true\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"0e1f27e5568c3ff038c0cae61a72016de3a55936","_id":"earth-scripts@1.1.0-alpha.24","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-pFQ8L9KYvEa3D/CcM4uL6Ta/3YBZ1e4a6m/BbtNkQk+lY783lFQn3CYFcmdTXAjKfkh2NXCrZ/pN/dHe41S+aw==","shasum":"ec3b3a5a53a4284a5bf0888793c11191ad1375e6","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.24.tgz","fileCount":83,"unpackedSize":187346,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcAiXHCRA9TVsSAnZWagAAS7cP/28aWDHokp/Rl8xSxQ3n\nwBsRipbK+7Rz/Tk2FuC3iuW1MlJcSCha84xl4/SLqoGDl/QViErYAulJZiIz\ntOCx5rv/GZwyhpspl4sZ0pw7z4EG2wxDNr0hSJ78/9s1moFo1P3+KdBj3DGa\nF4ijEqrSrzhwnLgh0pJE6f02zrb8kngQ/acWlq7NjUy3IJBR4bIObw1OgzBW\nzS33zaRgaSFU0aQf5beYHo4tnT6l/6Ubb5i41QDDfTRoikJCoixwwS/MQ290\nC1+0xO6Xmha06IEhs5JEbvrYp/cthfvN5jAPccJ7MieTaD3uuhOPxEAl+f+i\nNfho5Zb+1O+sI9C1MzZv+6+ug/pyEYYR9KrVOfz1IFHvk75tpEW41W+ZCx4I\nyhlO1nJwoRYaQkDfl5WfUBHh3f679W4D+v9XhPj/+O6jI0i0DE8r2bhkXaGC\nXQ0va6AdeQB2PTnGSX4B/jZN4nefOliQi5HLxHzHpjMdQK9eIuNixuivpyRx\nJRx7Kn/NyqEDI0kewdQ9tUl6jT2NP+zSOz1rd/8YKuwYIueuQzJ9Qb43kVUO\n+LoYmyqMIRZVSszA0qo3WQe5D7oN/B+lxh4XYH6O4LLSocJ7f5e0I+uOqvFh\nzYyNgGBeKLbLW4CU8yZGdr+tppiI67zVn/bjFG/PxXWJMk2DQ7Ujog5Igpxe\nXBvw\r\n=pFJe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ99lYmzy8jzdN6vgdB2n0NYltzC+j1yCTht+D9wHzMgIhANVIIsXNagzD1dnVLhodDxLZCzMjV/RYSjdSlwpEbrPl"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.24_1543644614969_0.1513389640286915"},"_hasShrinkwrap":false},"1.1.0-alpha.25":{"name":"earth-scripts","version":"1.1.0-alpha.25","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start -- server` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyServer = 'http://test001.payment.58v5.cn';\n      // 为true可以拿到代理接口的response,可在apiProxyReceived中做进一步处理\n      ctx.app_selfHandleResponseApi = true\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"7949de22eb6f18d0fba562ee12ff94278068e0e0","_id":"earth-scripts@1.1.0-alpha.25","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-wLXfgBRrogyhIXjI7Yn1sqkBklIW44v/hWgz/m9HlDefqPhDxfGeKrB8ivZKvi2kyqqhiUzIYj4cSaUnnTpoMQ==","shasum":"d72fc84e4a44eda2817b66c387d122e6df4bdaa7","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.25.tgz","fileCount":83,"unpackedSize":187630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcB0BVCRA9TVsSAnZWagAAXnUP/2dHJwqOSnsF6XNDg10H\n1Ys6ZJHLLHt6TnWdLf6ZuSlTHIqXeIeNwoFJu4ZE9P0YREOVi6GZkz5i/rzi\naG6K3h2xMywBzWg65cazbIUm98bpPTOV7mwpFfJ3FNRlS79e1RBc3vsV71Wc\n6y9k+XxsZIrJNvN5j6hue1gkyFTk0r3OGZOteeYHSV5EaiDt5o9Uq1zr+bHP\naic0LLJ32rqTa0QvBH3S7dphoUVT2Eql/2K64iMrwXOOHo0mh5kaLVFlk5xt\n/eDHfIMSwetG1V4FTIt4mCz4YYg/wPZmzy6q9tLIt+KUS2KqTUAI8S4ZR5QJ\nXR5MagX6h24m+0E/zNrPPr5iTCobRD691zOW758NyDChQ+ohL7Cwl7t5LEC3\n+y5RS7AKCCtLXBVOZE8sZYKbMF/oajOjrwyw0/SSLBSAsMcgfFqODLvTY4Sy\nYFTH6ZUT9wt2brbJyM1zG4h0HN7NbQgAz+fbS41+b+jBzY8jiv3MxyLCYg0W\ndLR3UglShBGfxAZjO+d+Nxe/QvhZ6lQxTN84jKJwKcPIv3vhYhufVQrkzYeV\nX5SHuxlVGLLXwRTMHE99PdXpeUthBy8wmUYW0/OtB3VrNv0QLOy+Rj6mwDzv\nEEKXMueLwYyws2NIsJE8QVURRrTY9yYeSYB75bZmO+hISi/H+FmLr7/Wifcm\n7H/O\r\n=5I21\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGMhoX1MLwk7xkOPpKmtkbVRwT3wlymomHinKG5UsUBPAiBQRyuXdI2P9xuYTOVt0CVy37mubHAJVPj3Cb6kimKUMQ=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.25_1543979092322_0.4165769735034379"},"_hasShrinkwrap":false},"1.1.0-alpha.26":{"name":"earth-scripts","version":"1.1.0-alpha.26","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     app.init() // 必须，添加基本的mw\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"759ff295e4cfccbdcf9d515acc837d27a52b2a2f","_id":"earth-scripts@1.1.0-alpha.26","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-GFIiIAfHuiLNaTHblRzE57FqugIwd62ujCFX0VUqraLgWCeoOr1eK1osIgo9z2bnNdPAZ3/3o/miJnjBrpOG+g==","shasum":"ccdc627b564268b5acc083b7279b8a70f1a6001c","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.26.tgz","fileCount":83,"unpackedSize":188157,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcExRpCRA9TVsSAnZWagAAeOQQAJTN2BtDRIa/hvoICDsh\nhmzN+bJJ/gGMGG4+gvSBaGejHQdvymd5ngtJFsf2O/spIfwaqQoNtLU/JwWH\nUy3ShlVYtg5KiL7w0bivlPh3vzWUj1Xf/uQcx+B5Rpuedw6tTFPWaD5GXv3y\nIT+dOo0fzqAXo320+vkqJ4DFj2zdrUAQssSQG7U0FMPcxvaU1X7C7OnaukZb\nfCShsmv3oNWmXVtgg/D7zoyCm4cm+a/+lPuorTpZeyfm0C8uySfzc+iMUUHo\nWehYqoXNfXnifEVKJ4XG23pCBRcEZhzZjzj6jMKrEn6ORafC5wCCvmkFfECD\n8EVTEJRQ62eJNsybLszLi2ol3kA+yc/nKb9dPsQzwd0Asqu1YXnZV/YMENXO\nnCbE7TwR0vucQYlhc/1mw6ONVI3TiC4wMhy375Dfz4qucE8YVGUM3IXZLr0z\nPg/SAyyEkGp4j6pNeEer0Qzx3u61/qvnzEvhvd5TmqC/2q6sYX8R9cuggMlS\nanM6jEcqRxakhU300na55mmM5zr44UkaCaO+BqgVw9hK7Wvspv3DeQZ9vFMV\nQOZGghfJZ9228ue2bTUM6Im4jyJVuhmiFntYbzMH/3nlFxE68WIBgLXrKoOx\nL4x1KgkolbJgRTwrPVxrbrdg6OSPfP7wBY0egx1M5CpAvVVizrU0AIR/4RBB\ndsOR\r\n=U6ym\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFzB6DPJBK7bqBRFPi5BQ1+MkPJ0P4vMdBTLCg2Hz56DAiAJsimB/KZHeKx4HC7Dt+iExlamWwlR8tFa0tAM2pnbTA=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.26_1544754281133_0.008242041673191647"},"_hasShrinkwrap":false},"1.1.0-alpha.27":{"name":"earth-scripts","version":"1.1.0-alpha.27","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     app.init() // 必须，添加基本的mw\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"c5143eec6df91dd6ab863dd41d0166cc3254b9b3","_id":"earth-scripts@1.1.0-alpha.27","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-OX9WoOLQ/asB01qnpPqczP+oNT/vQUl9vy9yUZUwwL2Je0u+AZM7+nQ2stUKkCMdb8rAi99EBSYmy7taA3/qEw==","shasum":"cc72ff349a8b6d4d09e116a35f924e38065c0aa0","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.27.tgz","fileCount":83,"unpackedSize":188195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcF2DaCRA9TVsSAnZWagAApGoP/3u0gqmTHjKhW1pcMg6Z\nWAB2XjRPb8IBBwUHY+qMD2KF4RAD3+7EGDsztuUJjgww3L41noerG9EbhdrV\nAp2K9JzVnuTWFfNR4InKvBVIbwOG97nv3t1o2MUOFTZ73cg4uRgFdL+8FrI+\nZ6SfYoX8fR2WzGYON/zMxQoVRkyp+HYRDzMXgboZztP1gsBZSJ0FKovcLfy5\no3Zp+uOC2oknkyAo3xNdjaqEv2V2VJR6G2q69P38Hafxd5jwlekWGv0oiYfW\nnP56t2uue0gV5mJTcXeUh84ifilM+1E8UIqq4F51aOl3M8Jpn1jODyPDLKWc\nwJPh8rNyX0BKQ9crl0HDAKnJNrGx3mv9KNePufAWBN065FWH06e/eFz6m5iu\nou/N26+FL4RmcdEHo39D/jBU7B0RHCq4ApLvBkSYOfvBi7dMkttrMgukodUr\n8azVlNedeE0kdxlK1XFQ8xJB26r+vc7VLGkEX53JpgKC1EXGdfr6e17jxgjU\n8wignY0Whk/UBPcyMBM9wQUT3r5Eq65Sm/eWXl4XmKQdn+MFQknr2MXGG5nl\nV9AggfFm/+wMd3WW+weyIwUJEWjx933btHrlP6nbRi4o1joEp1IeBMI7hIgd\n6EgUZOzwtPGoNBNqH4GHFSNazZOQkCnjW2QGcdxm/CLHzDaKw0WrTtZSX3+Y\nfyjN\r\n=RjpH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHDHgVTSO0gr39wiXMC+pZAog1X5d+k4Es2Ijhacs+I8AiBVyZbAmHwf37hB3tCVs/9lS/nbqPc9dMWAgK6zA46+Og=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.27_1545035993361_0.02800912833906888"},"_hasShrinkwrap":false},"1.1.0-alpha.28":{"name":"earth-scripts","version":"1.1.0-alpha.28","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     app.init() // 必须，添加基本的mw\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"d9ce836c1cb58d636b192892e425145d27e0f2c2","_id":"earth-scripts@1.1.0-alpha.28","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-rfOXRLK7/UOyoA5aXslxpOJr85K3C41+dgKNhAuMy+3xLClZx18HfiJg1chMtaczp48OVNX+iuY6a9R7FEkeFg==","shasum":"a005120b379c689aa969d06cadb4de7cb1104bda","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.28.tgz","fileCount":83,"unpackedSize":188234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcF2lPCRA9TVsSAnZWagAA4NoQAIAFEhIZ8Pae8SgE0Uvd\nZnHJ98Ofn0Co9cgeeDTJXVUBDPT5d6/Wm6LdWe02eWKYgTZJmyzLqvLXYHOB\nUAE265QGdWlfYhfM4Yobe86ZXW51mPXUlmR4fide7pe3DCSpVGtAx98cgVhP\n4cDz3HmXYTdptqGIYed6MF0Om8XZ4wdceJ6hlrVTOb7WmEhwSlQ1VeyoCl40\nDqdA8BxJiGTwODbTx+8heEv+3ih4JHgnxe/XMoF7RMK4693/7jNJCEoxBQff\nuGv0nbxW0SQu69LA6dA+8v4O7r921ReJiV+vRzBuAsQhV6GCnaxeD3N09H7D\n8G96E6RV9lDKoAxxjFcyZf2y6gHKsyvwS8VMfXdEuBAbr8ounqLCdsOOXXGM\n77zDXWl6C4P+SP50FnlCKIFL0mvJE/pWa9odkz5BgJPeIG91g6Lmnrhb00GI\n3f7DQmyqee8Vfld6X97+izyobPw/VQqb/QQNaM/4yK8zX+aJapisxTEwEQIu\nCqOuUrgfHuABg1T1AYHmO+KjqLJ6Ne0sxII+S7AQPbGmcsGI4nV4GER7rJn/\nMvFcsS+sLY9WjPEM7vwn/7H3mjexAUG9Jv7P36/+0SYbzEVUZmpDLCNQVSNl\nOar66KroAfAZM8XDgB1JKkzmhK/ti0PmljTYW8ACIqZI0cS9IqjH9F0rJb5m\nost6\r\n=MJsz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDI106w5+KcDWQncYWcTJbhsKe26GnDxjxE9Tzj9qEA9AIgEOi4zthuEvq0C3U0/qnrIIsPnxfbK1mggsnFW1rt3eI="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.28_1545038159195_0.32061973557024204"},"_hasShrinkwrap":false},"1.1.0-alpha.30":{"name":"earth-scripts","version":"1.1.0-alpha.30","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n  - proxy_[name] 定义代理的接口前缀及逻辑。eg: 需要代理的地址如下，/api/user/center，有统一的前缀\n                 api，则目录为proxy_api\n    - index.js   提供两个方法可供自定义 apiProxyBefore(ctx), apiProxyReceived(ctx)\n\n  - page/     page对应的逻辑\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=_server/app.js`\n\n\n```\n_server/app.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxx)\n\n     app.init() // 必须，添加基本的mw\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nproxy_api/index.js\n\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\npage文件夹下可创建某一page的js，自定义是否使用ssr(默认都不使用)\n\n```\npage/page1.js\n\nrouter.get('/', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            browserRouter: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\ntodo: more\ntodo: 优化\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"4af014f130e263274ac8b859cea7af9f4ca51762","_id":"earth-scripts@1.1.0-alpha.30","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-MtHpitLcT9u3ue+LMqF7NAZr3NLPNB01C7s9oYnpbC44ZmmTM7fF+1gvAdZurhTvlXAAhmnx+pKtbKoCgTC5wA==","shasum":"4feae5966a50f37ac21803dc0c24b3a5bce8bb05","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.1.0-alpha.30.tgz","fileCount":83,"unpackedSize":188226,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcHL3gCRA9TVsSAnZWagAATyQQAJLPXVO/zFRu7DJD8Ba/\nna0VAQGR9SqIYvE/Q+a8wzC3zvUcbUENpnRle4XgQq/WSKzZW1RwbIZn9NRK\nTDBQ4Xd5M2Yeljt8Hipqo/oF+aHNUAyAz2IJZQS+2ID2wYEx9AFFeZgh0unl\n+YeP6575RYIwUeJKtv9J41lG9A86N5/P+AkhAK5A0aNkQBmPiI5pHknH281+\nI93QYvT7L0E0sdEAS5TvYHt/UnHHtSg14VwCYsvV0iuulEMS/Zv1oMoCA91v\nLxJ3U5sDJ6IJdjp02Ywidp7A+u66G6qgepegFB7aI2F0gdcmUpMLVQ+NkTFm\n5X9eE81F5c42M8NnZrmD8WEmtpM7IQfZdVoAPZkui5dbHNJHOHmm62YjUnJ8\nBDstYkygA8rtCpmzaJr0juGhoseM6Y4Zb+eW3ygK3oHOLOWbBkY6gO1y4TOO\n6qU+aRHFfkiQ7pbswn3vN3Ko1jcEHEiWjviyphaxPVD66pGg6/vFzvEFi2pW\n7hnkJ66Y+7QZoGHc1rQU/rugr6KRn7kwnY6iJ/LLATE3fdKH/FrgScCRwlL5\n4uE0pS1Aeh0o3Od6bdw5oplH+BMZ3di6aHpmkApiMY5lye8XPE46wUD4ST7l\nV/a0xO2hMdv3zXk4EHGZR7DqRDU293T/voIAMAoRjwH8Mv4ue62jracsFJDt\nUjRi\r\n=tQMa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1OwHCCkt+uGH1Zw2OOTF3CHL5C5LNqnQzLRw3Anr0qAIgI7OBUlmsv4L0wNTk3dLKBbmnHoTYxKVp3a9nlMso6b8="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.1.0-alpha.30_1545387488304_0.7519377507498566"},"_hasShrinkwrap":false},"2.0.0-beta.0":{"name":"earth-scripts","version":"2.0.0-beta.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"4eca1eca07ff3245d9ae433258fb289a6ef3dc57","_id":"earth-scripts@2.0.0-beta.0","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-xUP9qiZ2Tq7PjYSUza+5v0Nv/ilOfIBCl7LIz1ppXUUJ96mpelzdcRtpZf6WWFCWMjSBcQ5EfNPZOCYIcqBz+w==","shasum":"a0539c8dec521696375a5e9cd46ddf8a50b8fc99","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.0.tgz","fileCount":84,"unpackedSize":185698,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcIvrlCRA9TVsSAnZWagAAHSgP/jJPQ+4rbe2yHcoEzOmS\n8JZ8nUBgyAG7XJ2O5f3tbJS+m7YiPOJQHAJr+EgFV6dJ/R7CXu+wwesVz51L\nH/EOmRjaas6g9igcZQHdSjnzYeUqVKibgLENh6PCzWiNl9MH0UrgwodH4pSw\nN7XY+d0rtxwt1x2Gum4kg9ZKsYm9oqx09ytQQPjRUmreb2eMhUQRRMu3HTo3\nS8lkdcYrdxp9C0NbphsAfSqsjl9UeDoEWW8Y3qkXO976apPy4XF8K5LBtcmR\ndCdDHMoEPu+N6sP5ML4VGzCWWOPsegeWtartfrV4CZQEu6hgJN09KLZKVk6K\nVHh4Hh6ZgHL3+WCHu2URcPLK7lk/1aQ1hR39u2+Dc0CMvVRcQdMPUrZ1X4Fp\n5B2qqzM4NHu1iIIV9cVmIsdo52EPZVAp5jcmaCn5yijgLZteQaQy8SmBvx8l\n6oFfcfaxDRtNuDjNA/x5LLxfehtMf6CVpdWP+oMBM50GPhU0O9YaWFk8X7ve\n3xpHlDKDntrgVBU06TuBPQrgxmqWrvrCV9R7hznh86oCwFQlwip9Z84UeXSp\nNKtK2brGV85pVLS+b9MMnkPk7hS3KYjt+GuDnlzIQ6OQ3orceQUN1ivNQG+u\nyo9IE7S8A2myxThnK4GQi5sZuVDub54rRkXRsrY95jxsMzsQig5EIXwy4auA\nVeCD\r\n=hlEF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIch6KNoTg4Px471WKRbTfAz7UK+16MxMQjRIG3RQ33AIgbVz0/Uf1rl+Zf7/Ggi2v8SlNrBJqN/DP+AWFRzUQcjg="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.0_1545796324469_0.7547373194697569"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"earth-scripts","version":"2.0.0-beta.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"2ecb918ed690adf30cf73d34db395ec4177aadea","_id":"earth-scripts@2.0.0-beta.1","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-rw5gPMha6wwyKfahiELivWv119hNI9Ux/dvUX2d4l0TQtWBDPoVRLv60KW/75MrmF9tW9IowIv5MIxrBnjSm6Q==","shasum":"bdceba81a4ad9b0ee3df1563e3740c8954af84fc","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.tgz","fileCount":84,"unpackedSize":185677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcIxQUCRA9TVsSAnZWagAAApoQAJvNaw0svJIvyE2qIiiN\nhlB4Gn/uaA9QUg5jYb/hIENPSWdsKvclpAJORCGNUnY31S5jbwVRyI8A9PwH\nrJD1ND5TpzipINiIXDOW4JRh/U22Yti6NKQmAWChnVtH6iUSaaQEFgvPeGcw\npcikhfl5lHIeQHu8PbaEbljcPpANKk7FldL6sWgHKNinUpY9GLZTN1WvLJFO\ndcM/IDSNLWOvJJNCyLzvMvwi0K/or3YY5W3PpK0joyO0reH5tnpxuj0jSlL7\nAT3Rwt+o2+B5YuS8LgoO5ou2Vz1brgfaYm3mWd9H0/jyUTSu2faoxPx8N7lz\nRFuVs+zrhJaAcge7fhl7qYwK/Muud1xBBNHpToN/hbEiHHVvm7MEFQyKLwPQ\n7daqXmKuco2vC6i3ijU9TJiHwPAwK3MmB/624PNWKU4Mt7hY5cDGoAiEtAu2\nlOVuhMYqTUmx1LoQYoynUE0fb9iATYJKP9UOeMFbmQ4txmR/GQ/lT3FNdWm2\nhLc3XLNWssMlFQEKurw4PmNIhJqMdDC3xN+6VYNvZ1QtuBZK8uFlNu/cNQXM\nVDc4cXT0BG28pC77r/RzB4liS2X5ZfoVLAKQZLvUxK24hKp0UINXccRiNZpY\nJplRh5o5oVC+BFxLtdDIuIZ/vdL2OOPoxmaTRlfg3lNGh/qLQ4zsZ3rhvMPz\n9Myh\r\n=k0d3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0C06Pan2puQwawckQrOB7YaIqy/9DAzTFcbMqXXnMWAiBB49Boy8SZRTQ/Qo9STb0+hCcvaSAFxxgbqNLJ/+GHrw=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1_1545802772030_0.36543518141568687"},"_hasShrinkwrap":false},"2.0.0-beta.2":{"name":"earth-scripts","version":"2.0.0-beta.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"973596e23f01d188a1a077f47db911ae4a9ef345","_id":"earth-scripts@2.0.0-beta.2","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-hB02b1w54y6m5AN83URSr55TE2jc8IKxd97wb/T2BtRjHAd6yxxYRihObefooS7K9y6sUwTc2NcJ4HKiCXD5PA==","shasum":"7bababc9b17162468b8875bb6c386c9129849a79","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.2.tgz","fileCount":85,"unpackedSize":187796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLH+VCRA9TVsSAnZWagAAHV8QAJzghmkXYjzCyJbqH+zn\nHvfaQQ0QAsgW7DIkSQIgQng3xtuuHBiIOnQu+EASmITqpUVjngsXg/7di8v1\nr6yqxq24HzxGuuIUvhcKl6xtAgCpXMwD04Geo1IMxfwq9m4x+D3aOysW40uk\n58qPLYpYFhtzP7ORxuB2r4wxWQ6CMBFcwyEW+fUgxOw1ZKGuE4IqXh2e3wMx\ntOlq7U4p0fM72wgNI7Jewo7BAHRSirOmCGb7NxZJhlhPuM4v3EjYukvJkk5Y\nvmMS8hWY3qomG4uZYDE51ULLpUYgkfCu7rfHE93JvHQb/WjahRXjTu1WbT2W\nHGR5Q0ZDd8G6vy4rWYSx6mAN8BNjc+wqWvlF83BXy3/wqsX5mVOsB9f9OLau\nrFqtAMbEqm8yHk2uWQ4/9ttPJfWmlvlLGuzEE0BjWyzDw2e3rkB681DHuS8F\nnM00T+80iBk1HQ3O0mMrJIIONIZGso/aSPbMivVn1KrDIOHo92X8D6YuH+mT\n4LX5cOSb4h1omby9UTdEyLSlNNs6xw7ekg4YfOfKN8gobRlxPbcW6e2Ua87W\nmCajayJKmy7czVXuP4YxB0yxTvhgE3FDbnTQDsgY1tGnOKwc3/lHO8I6gsCX\npT0zXeaSl21kNinNnZ+oZx/rdvH9EQOSpZzblfm5yq9qK30IwWuywkYOuGgd\nZbmO\r\n=I/H6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhtaggK51NYeITCDLaWCfgF3aqgwKPQJfIeWiCWxgrLgIhAOqNztwJoSVd2Nm5c2zte1VIHraxjGHR9+AZvTKF4ifi"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.2_1546420117064_0.97975612245616"},"_hasShrinkwrap":false},"2.0.0-beta.3":{"name":"earth-scripts","version":"2.0.0-beta.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"3d496e35382576d348af8eebcf3ef4e78f00f42c","_id":"earth-scripts@2.0.0-beta.3","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-tFMTK+Epweui2W+gJxE1wigc7L/xXwN5mOaaZSOXHEIeTNbt31//avLha1Z3paqwsOSB1QLSP2ALCUj/rA1QMA==","shasum":"6068f527ea47baa8161448d2bb87109e639b8ee2","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.3.tgz","fileCount":85,"unpackedSize":187776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLKuHCRA9TVsSAnZWagAAcoUP/j0FTG8mwsQsiuj10NG5\niIMbMGwIDo5R4L2W+b5n6doAl2cX329gMjUdYu3fvA+O6zsB3E46TATPw2zm\n61el+cRiIr9kycj4mJA//SeoyyhAL+BrvEmZobgTOnZNSIExZqORE/2efw0j\ndLYyzYvrkz2MtHT4T/AlFQobDlDT8IYCNWcASYcybUIyvhYeFOzSxRgxeqFd\nDTqoNjSr1qy8WUCYgsCVFwxCaGyLCkYV6lBtfOs/TRkkJ0/zR9+Ms0Iew41c\n0unvWs1ksXaGI5N/vJ+R4BcBSHVzsWgbElMzPbvhvrU9fxKnvFf19qHnRbYB\ngBdb3ym34SPjPlHsVvXXFmrD74409Sfwie4VvpSSj55tPg69ySanLH1P5ikF\n5hN+mIFtDgEu3XSVh2AeJGn8oOqCx8Mb3MZaSD9F5S0yLqdzz0t5cc0Z7GdE\nZF+EH4l6ClVvZaMl2H1ArSPi5IDcuz3uzQGIITTYj2FrpKD7ztkLatrJmEbN\nCLsjp8AgT4X0ggyIA0ZMVIGYCc8Yq8PW9JfityQaEfjrqOyecT8U8cvPdNLy\nVeEXEjxWj0I9feSimR/i4edSJsvbM6LIy3dQe3h9s9U7V4juETWWbdIS8awk\nCT0sYgIUkijA2P+pN+AP6ym85DmpCbmCuRso3s0gSzQY7Mc9CnQUxMqc31WZ\nsW1o\r\n=RCFE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFZcANlP27jqBkNBudNmIdoH4jBZuzfmxJ0/32xqkbDIAiBO3h/PB1qaBpHj79kPtSThkhHX0/BQe8Sn21pmYPsJIg=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.3_1546431367019_0.5846630108283355"},"_hasShrinkwrap":false},"2.0.0-beta.4":{"name":"earth-scripts","version":"2.0.0-beta.4","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"8456e749ee7deef6803a911f8c4d88652678f954","_id":"earth-scripts@2.0.0-beta.4","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-n77t0xz2KggGUcxxsPy7uGda2+rH+JOHbYicQ9r3HEv5eSTE+L854V7GoOcNSLuT5llcpdXaSNgUTMNYbnA6Ag==","shasum":"2d2a19ab4e73211063fcd93848a3c7c3254d63ea","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.4.tgz","fileCount":85,"unpackedSize":187887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMKXaCRA9TVsSAnZWagAAR7EQAJ0K5ZGCXbDl34aOQF3h\nIy+fHeEGwiPgvGYPaK6Fz+0Ueo0iCVrncJMp1DwVjqkIYsLHVX8mGp3X2lVJ\nlUA80vqMMu1ZjS3MP3/3BZ9TFGw0xzj1xCI7L/gL9Gl0QnDysOtiVzAD7Ezt\ne40BxKMh3lHBMRl7hyMxHLUtJnWkoOfF2nKne6CW/iaCyysISr94JG57BLxs\nhPAIIWCWuJG/zNKfZYAQz6sZvdc9YIBdb86X5c+lNR6lOWTUGYZAzb2jqJvX\n8VmuBFlO0KdBeCfQ9TP6qKHh1ix/g79RrEOnZQWoGNorjmiBsTYXufmao59P\nrkivQUdNUFijVHVQSyhC3ca/ESXiNFq61BAfZXRCWNi0ej8CC3/KMMz2bEY5\n1fwXO02DiVv06MgoRNBEpgSYfowfehCJO/lDwUuDcQK9H3+eY9JCIS9qhDhj\nCLV+VRdNNAy5YR7YQSOdS32jh3Mdgu4A8zUvLcn9rQpLdkDcEwH59Y3nfWty\nHZ9dAi0D+yS/WiCceUqHMm4kkGb6OD2DdzUd1Z82DHDX1p3hJiyzzXG56v72\nplrr2PAppibTiwNz50VZbymzSmqwj5HSCrpy3z2pjEfb53p4hR8+eVL/IPGq\n8lv3bN+L1gej8T9cDbxjkKPVoJ1G+dQjlDcu8WUlUzDVD/Iqflw/KJ2QPOrd\npTOA\r\n=Pimz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCC9hrfz+ULOZIutelK1Dxz1DK1M89T3hf0tjqf6D9YOgIgGQhE+9ZfKbkNu7XKXIIBgJ1KPPTAbE9JykgjQ/TPCiI="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.4_1546692057319_0.6222915171201302"},"_hasShrinkwrap":false},"2.0.0-beta.5":{"name":"earth-scripts","version":"2.0.0-beta.5","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"fa91cc7df77777b462049297719075b832d76478","_id":"earth-scripts@2.0.0-beta.5","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-qbHIKEYH4yXga75jECsuW4TaRj3SRIiJGKAKV/D500U5pxgk9nhSpRvOXoUehbNT0zCA9uh3AWtGU7arAmuH8g==","shasum":"4efda00dc9b8dc8764c8305e9d150a5e5497eb16","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.5.tgz","fileCount":85,"unpackedSize":188018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMsUkCRA9TVsSAnZWagAAG4AQAIPGnlPaMw1NCG7NeXEL\ntytzm2JPP5sFgmOazvd1otCzp4e4uj5gDZL0TzIF+zZJx/f5C0avldtkpOoZ\n9oeMCnyW0M88U1Rfr+V3k3HIvZE7QvPY9bs6vOzINy4Mhr5oWT5SzuZu0w56\noSgyz4EXeN/wmmllKZNQ8O8I119oEguiad5dvOxKwxNuR8Pxt6V74cu8LwHP\nOl6sc9I//LCa3nYCRZZpWFnnpBGGDbhYoknIm3ZgasJJfHtyBFlzB5vM5WwF\nROxAxjYtkGcXbySMeVdJKsiyHw48kbYgqYw6bsunyTWWIbniVOuSOhAXMOiA\nX8Ek6HWUNNMyX3Yws6UrK39uqF61lXZ+15I1jVtUiPUBj/zDl3fM5CTw9yot\npEPzbfmLovzZHDRMQjH3KRe7dF/UlESMuusk63Atr4rxnSnCSpRV8Vu0zhgf\nE+s3jlfaWJaAkK8iNr8QU3gzLEnCg46iOlXVmQXo1Lg7ek5D9aQ6mmS7HKrf\nkSLbGIVK4zxYPXxdmWFmMB0LuAV+LUE6/ODhEki6tPmjVtdZn4i8/YNmaXd6\n+JsJIatzEyxAN0q8uVUkqoRpULpYT+2FEPHWI688hpBkJL8nO8dKWM426rT9\nDHv/kDjOtwkyd3oQfF58VrWHfJAWSQZWJY2vL5ZMuaY16r0I3Uyx3ANugsXE\nku33\r\n=GAnN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHtAWbnITEhUmzxHTtTCm6LzU44/fF6vAU+eLLTMWTFnAiEAqxIj1l4gcN0J0SHmGS2cyoTBIw2DuU8Qkjyx6gpweO4="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.5_1546831139814_0.5984181878126411"},"_hasShrinkwrap":false},"2.0.0-beta.6":{"name":"earth-scripts","version":"2.0.0-beta.6","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"0cb56e7b09c1d0a1273ae852ca8befa120c284e9","_id":"earth-scripts@2.0.0-beta.6","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-6tmYCBIiV9ad38bTxKYPYuLTbaYR+RYXEE5Bla61N9QKYocDIRT28kA6/KVtS5Hb0dhoySinEaMhE8sQg3et6g==","shasum":"3f0792b66073b668da86613ffd376dc0a1d55f20","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.6.tgz","fileCount":87,"unpackedSize":191524,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNZlHCRA9TVsSAnZWagAAh7MP/1BQPBtbdFc2goaw/nGq\nB0ar0aKxtPjP0QJXVJAdHjvWK4BgNc9//Ww5G0Vj2DWNcAgYFa6zyrYaIJob\nkgAGnz7g5DxP5Fu807Yfh0kZKLijZdfTrvKXtg/NNYDnaXIEQJ04Yqwvd/qQ\nkUm2GY1hnjkoAUsi5c/QNfXkPbsPWacgbwe4I1AW9gT8dSBf4oHSrzibe+lh\nHcmv/5JX8b/Xt4SKTHfFpyyeShQbI92Tj8pVgQz/+QxfWLWUn0CXVfeMZupL\n0gt9UzNrL7Eu8meMIHHus05wbzeAVnmGmiXUCfsBfL94/LaPczeNP5ipmW4A\nBifVg5DZmNEDEdeoUlV5XlgA7LS7sI+zSecIc0HRbf6jNnFdmGv+enRCgjJt\nxLvop8Nkn9pERKKeo5ynQ+v8iH/tvyQjeAzSsP0jPgJ0t9KhYdDteBcKQv//\nvJBg4tiuiT4O1SWCvoNh5i+ax0LeF+TdDcdiQuZGoptqGW198Ln9D8tXYEza\nahaRxoYSjJe9vLvdB37BEctLb4btp8I0ryOvJyRELDDYHGotWASBtCwLVV3B\nEAGhrsK0oYg0x/b+f6R9J+sKOe08fOCmaysdLGWWGIJVLzcDLzqzgGj4hh0u\n01KYmRE0J2L425CEjSkdJgMFgyoORnhC6dyLH0o1CeUn9yhME0IYFmQendGa\n2R29\r\n=RAXO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPSsdI/yLKXEWiTXmZHMVbK0EuKUtuKM7+yEjA9taLagIgL6NhbHx7kPXooPdHMUZhkclP1VtOcs3bjlVS3+w99s4="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.6_1547016518953_0.9930331560885319"},"_hasShrinkwrap":false},"2.0.0-beta.7":{"name":"earth-scripts","version":"2.0.0-beta.7","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"8b11c40215d3cc8776e9f0b697bc5e6d404e9473","_id":"earth-scripts@2.0.0-beta.7","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-9K49rN0/N+MIRQRQEdcbHpp4M7tZO9vB9iaEwL55JCmPL4yzFhZYtD1nfZ+USzpqr8g+zneXvZt3F0lUXWa1Mg==","shasum":"f11b43c212734d60d0ed6858c2c7e297bc39353d","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.7.tgz","fileCount":87,"unpackedSize":191652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNcQ+CRA9TVsSAnZWagAAAsgQAJhEexdDjHYJyZWgpDCB\njTkyK6uY3jH6XKH6Z3QXTNEZ4Cx5UtPG1woZ0Q8S6y0WEGw2euJSOHQpMmcM\nOQj3TmXJQrUKTX/g/cnk+K685KanJeHD1RS5YRA0cRNmNeQIhEN/hRQdNgs8\n4IbAb8gvGuKxC17T1BFrwQMpEUJub4mg2YTCiFRqFp0wH4vySBklIuzb8T6S\nBmv/jaA8DrgK56YW5jbRMY8XN/nLsM8nXrROJh7KK1MO6esaJBqSLtgwld4t\ngSkXIGz455F/V4c+Qp2+wfx/3n4GHwu4i4F0xI30Ah5KBu9OBqfy+kMjuytF\nSTW1c4YkMSL1jOVVvktsTzn52lDVy/RRWqLqG71CNe3X8z89xvyvuIsMRbqc\nYxZjrcLbL+7ParGIf2npXjkw3HrAAdbAGuGy3RSDyieHtE6Vsd07W0yaowPo\nFfhrU3is/RwhTcSZLRSCRJIx331F6ldnS2G/gZq4JQqi/rNF59Cwq8EPVJgm\nvRULOnyvfh53s70CDU6jcXJyBfxDt2BOoSVhVSM6/YT3uYtR7V1Yws6VWxrH\n77F6Y4ReqED1jqC40ryl2baAvhOHdvqzjo+I7rxe0al63xMmYVwiom600zmI\n50wj6OIRAjAeuTDt5NgbFn+0Jv07m+dgBQUoNglU2nack3s/LfvORy0pCae4\nw+oK\r\n=onEn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCz+F6jN8fLss9CkQ2XO6nsvPM39TiQ0J8madnk5HSA7QIgIZxHrcsEhIbMAjTqew8ELg8EiEZ9rqOJk+TYbfRiIpo="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.7_1547027517880_0.9268985871901874"},"_hasShrinkwrap":false},"2.0.0-beta.8":{"name":"earth-scripts","version":"2.0.0-beta.8","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"7e7f24be87df1e5cd2738d8d9663f7503d494a64","_id":"earth-scripts@2.0.0-beta.8","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-50T5M8+4tKJTHYNFHH/Yt+92txudXx7VNglPueFJxMkz73u7mLcqfwcWZDpaFRXcA4M2uvLDiakNBiqXgHKEKA==","shasum":"e59ebd011a19b704abf79494b40f0cfc94830efd","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.8.tgz","fileCount":87,"unpackedSize":191513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOBH4CRA9TVsSAnZWagAAgzYP/2o9gM0gKVQmaXp8zHiY\nFpzz4KCivuf248DDTG2z8gRWDzP7nSh5jsrdEJWvf5CN2i1EZsSndA1BIlbV\nd7kvDli5oEaqZ/VEtrr+qqu/Uk+N/f1bo5P28yHAx8HpqhGHR2Pd9Y/ipY06\nV5r/hTqioEeN7wepn38PRMcmPNG2KoXqFknTgYt3JRGELdkLGehmodj/vELL\n+xBxNhoaUTa2EyEA21FtR9bkUOj4Sp2dKnhtYg0HF6x2eLLwfaY5y+8qabwn\nquPeuaSedJFz1ZiXh6rLTC8DoRk0w31TkPcExpkM8Kk75SWSSDWzfE266aXz\nzTgLqR1H0jJ4dh0ObrUEq6rjppRw+1G6ZVa+7am9j1M4f6q1hVCrhNoUsPR4\n00tuwf8qz1wU/oJJf19bGrkkTP9oQIaasBCoxGdsmxOSbfX6ky2E/7Zcnhwr\nZsc3XlhJ19Hgfx9Yl+ijitSas1kK9SkkV86RwyW45/2+qGkCgj1HGPO/A8SE\nWnb+pPLIuhkRuU7p+ugs6apWzfS8biwi2lMx/XimPOo7xKPioHzYISvsbeOV\nSHJvJBIE8bBu6v4unIip72W0BEUGJo3OIG5uTRvHRZYV9y1E519ej5tXBrGl\n4PscQAWgsiSpxPJoSv0Mr/o783fblZi/Sk5CGIJ/ee78thliIDq5Cpoc7w/L\nvW/Y\r\n=26XK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICBjUkDfdjsU/urcGZwdr5wu+cUv800AzCtKIxMKr+cjAiBzdn4XLO7lO022jrbuGarL3eFXFevMnpNURBNevyF2gA=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.8_1547178488281_0.9873699517379502"},"_hasShrinkwrap":false},"2.0.0-beta.9":{"name":"earth-scripts","version":"2.0.0-beta.9","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"3.1.0","winston-daily-rotate-file":"3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"934c6fb1cc9f2a62b3a97d9667eca9b31277ccec","_id":"earth-scripts@2.0.0-beta.9","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-bjfNyecxt1SDzfwth75YMF8fnJqUppExHnfMAICMCcfKyVacRWuJGyW6StGHMSF2CqMFm0ITx+PpirMT/zhbuw==","shasum":"35b1484ecf7873473d02b3dbf658b74ab96c3955","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.9.tgz","fileCount":87,"unpackedSize":191791,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcY46fCRA9TVsSAnZWagAAIgcP/iOm8f2Vp5LWPIrsCTxd\nRONokl5CJEDvMqEZvbjnxa9OrVViGH5oV16T0VbUpuZxVTmpKyHzHdXNTVp8\n27MwQ+hAMlUQc5fxAwPpCgPuBlQ1+gZWXeGBXdPVXqex6zt6O+u4ZjLkf6jQ\nkxdVdMj7djMyc5P+iZR/EE0xnCCEHCxMoQIfjJoCXDHidGpHDUJBBToOHy+R\nfiGNmUCJweQHMNar1W7R7HAJTb29eCNzAD+fa57giedEQAg8aex1AbfUDHix\nf7R5bllhJxG5eauCBX2f6Tpnz3sMabxgXI8ivQwxFaqLFI1EUNilTLWjQZhj\nVpVs/YPmuwYuN1hVKMFxKXc9tExk590eXO5ECwK6NdzNl5A2/tfT6VjcrrzG\n4FDEmqK0YObxq9cqJFD3TAMIrnGJZjHt8pdTmXVrbWrBuK8olZ2YckLDlGWt\neo2tc/itdGbGxG7vgQiFQ1pY8OXrPB41G2nAlTmZqXfeMKfT31o+tA3XWLF6\nLeXz0PVt1oFAsugqjbEmIKuYuLs+Jcz0v+JzgW39M9HadtijX1mLCabfPLJk\nOAufrmOwKYM/wBxoAJ/N2NWxDJgsHxrh+9YpfrOt3p8efOzWIjDDvY17jx1I\nnD0hgKHbgNwKCDjWe1rI98YiPLZg8VOm8/aOli56h9H5WVtfWkCFaCK8Pj5b\nqfOI\r\n=gRMJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqAEHurgtsQ2RohluA5doHnO17T3czu5mCGFQoMYplJQIgYs+/2ZsMLBdZizNCDraTTvvm02J7J9TT4JgoXWeckJY="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.9_1550028446606_0.26037010151330264"},"_hasShrinkwrap":false},"2.0.0-beta.1.0.0":{"name":"earth-scripts","version":"2.0.0-beta.1.0.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"^3.1.0","winston-daily-rotate-file":"^3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"8bf29656a5d13ee49193949d7a886a54842b412d","_id":"earth-scripts@2.0.0-beta.1.0.0","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-hlpi9V4wtgLfwQ8lHyNpPtTCkrHNQ8tTRdRgLqmioIR7BwUHvwUk/gbFotNxlhlX27M04XgvzaYfo1sJp96okQ==","shasum":"b9d1d527c6d38b0dd9b6ef1a412dfa467982d593","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.0.0.tgz","fileCount":56,"unpackedSize":143873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcZUcyCRA9TVsSAnZWagAAUS4P/2EwxoC84VXkNNA3hAL2\nfSgSDgZS1cH9v65sPRC4VJ93pU5/uytPDdsCFbCx+qEvsAMhL5RlHsChXeBF\nxrxFSsTneZ9r4Jz6T4juz4VYogpXyb+93nhlTPWXmno3PoDpxC+5WlNj/MIe\nGUocIZWxSevTJo0txLlYuFjubrDYGhqha0G1saFuhSclrMzQBb/C3xanoknV\n0s35NgwDs+FufHfMe9wm6Vt7E6a2oReuzgBPyfmjhx3OXyTdkRr/EYvdiY1p\nCRwfeB9P3GUza+Yw7na68yf1qTxcu//g6RpuCtjyXhDC3WlR1ehNZM1+UYlg\nNpIBFH9kbJmHMUkwiiOuLqVhOFigl7p2t2+qt/15MaX+J6PqFhAVAsSVo9yH\nf22E3Qm7K0y1fK4nZ7MP8XgKQ1PyUjfK6JLw3iChLnWT1SUpmCaJgWsNM/b0\nZv+HQ5ivVMcwVKYSAj/O6H42TgmBxrNKASzX6eGtDohmwrCtWgf247KMPifG\nl+Pr0rpp3SGX2QAoUdbCk7avozB4pLkjS+Hff7Rl06kbJFQ/4+k+zgSPkm12\nM4ASjra5JSFaK7FoBOL75ScQlvr8uMAvlqW5Gv52dE49dSUz0pk4F3YKbaWJ\nSu0A0EBiRVcQatM6xG5ho507GF4oyEnes6mpIGtNoujjuYoh/zTRjzXw77Ic\n52RU\r\n=cavx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDobYaE5F8I1dD1l0S+1Sf3GEutDHeDV0ZQxqXrsVOAQIgXk8pMvv+OzUAy/X2gkjFMWFEbpAa0vMAe246JQ9CYd0="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.0.0_1550141234047_0.9788300324060661"},"_hasShrinkwrap":false},"2.0.0-beta.1.0.1":{"name":"earth-scripts","version":"2.0.0-beta.1.0.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"7394e24cd72f2ce0ba6368896772bdefd3552ad6","_id":"earth-scripts@2.0.0-beta.1.0.1","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-duhEaFHa43yXQE8dtcgjst7NaphmVuh921ZQho6Nrtp3Fin7Lbqv02qMcqF7pV42P8vDNX9sDx8tilVtcu8pDg==","shasum":"f01177a6df23b4d1889d226e06522a7455499760","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.0.1.tgz","fileCount":56,"unpackedSize":143610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcanO8CRA9TVsSAnZWagAA2RgP/ii0rhs8IaxyupW/jSMO\n9Q2Bipj1l11OswL7K7tzIQs4ENrdgAn0YvlOwyEcNFJk2FG7oRUdpqCn3dEh\nlsXFcwyMzkogWN3YkBQ4krq21a2lCGzuE6TG0m8iWPC0jddzkgOlZH9lecpb\n/1t2RD+SlcRZac0Kp8yPrjFhJ6n0O10bQMH+uJeTGt4n9GsUVWltyOClyZZb\nrUrNvMNC+oAFOprHaQBw09SDdAuOsPMiSU+9TqoJZMJ3654IxDZIflZjJySa\n5S51XcsiAHPbaui40Qqf+zuwCQxhqHBWjzveg2V9RJIloCLcHy7FDlNs+XMp\nj3iBIiwToMPBhCnF0yYoNApvTL/WvF1H4pC1qOEHzkOXgu0C30jSrBGGpVR8\nCjSBlv5gaOf9p2DyJD3yPgD1/9gRYGVV2bgQPSGnA3KmDd3nPjigyyJKJlOg\ncXP9dJXxMOfjwYVCbKPlfa6PRERHXoPqzyTEBWIJRRD4sg8E9MyuCT8Wb8V5\nvaVBb9Nf9V63rMmF7+JsO6lTXWw61GHj/UIB59boM23V48K11PG410itcFXU\nRX+yfVp3eBcO8dgyoob/aAeLm/dFpU+/NQjI2OnAQPdQc80zgT4i4EfxPlHJ\nVSz8G4Waz1A57s7HZ/xEnY0A1EYa1UIHqBufDEqruh2rF6iS5tbKPh+T1GOH\nonfh\r\n=tgdd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWC6FtlJ2j1uPE3T6z6LOey/UT7T/vbrOl6fzWrqGugAiEAqsH0LFPtGmIeWyPWcxTTfeghfpNy+e4fMlI+U1JDAzI="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.0.1_1550480316243_0.7365805779231167"},"_hasShrinkwrap":false},"2.0.0-beta.1.1.0":{"name":"earth-scripts","version":"2.0.0-beta.1.1.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"e7eefc4aca9b6bd996e604ccb53f7ccdebd6448b","_id":"earth-scripts@2.0.0-beta.1.1.0","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-KZiQASaR+G6ziANOHmZf84NOvlMlbMDZs2HF7loe4xiPDW1GYGNBmUQyCUh2hDJ0EUNVH8AazFYeFh8ZzsEz6w==","shasum":"c0fcec1bbdb99c81049c1ac10beb57b8cb385491","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.1.0.tgz","fileCount":54,"unpackedSize":142060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbpVBCRA9TVsSAnZWagAAupgQAJsDUy7AK+W2q8iacM/e\n8Efq1VgvQ79Bkt2b0Zh9b2nV7veQlqLq3xefCPXY1i+45NntBwTY4nsSl6Qq\nF6HSKcn32VTgZ0Z+ExvBt25owsendN73CdUnwSDpOOiPlFuuvw9DXK8VMUPW\nKwEZ0dqqgvv6E3L8g9w0ciWGuWCersEtQda70A0yPHL/RWSvc8vMutl51W3Q\nB1qpyZKS6T8Sy3BE5xGtxRvuw+7MWfNejBkElq+nzpLx7i0xML6KZOM/Pjeq\nMmCLzQC3qGCK0nW8VWCRULnGKDYmD3MqTpxs7tIpwGjwUuz1qJPSY501+VKT\naVc6d2gu2SzB50p0+On8dXOUF6Iw/s+0OjLeycUr/OEgVIzVkduycQfK8TXK\n//W9/ihsG64AxrrQLtXZyktVYlV+jGEaM3WmKSojVIsbQkkCTxqfBaBWGXv5\nZNw+RrjT4fCdff+CuhYQek4KGXC46hRv5eNeFpbvS7dRkjO3JPGbKAguMezZ\n+SEFbZvyw4YXuEwlSNp0YY4G26RR5xl6sATLSnKSTcZTYR5IqdDXDrISzZ1E\nTZR0uObgjqT0lbblcHSSlqnm83HFCGkR+rset5FUHC3jdDJz0wzGj/BzrGYt\nSIALPho++5ia9sGMqeST440fsJ1hTrYhqasAaSlbuQyBCEa5gVOW6shPE4Oo\nRt5H\r\n=CdCt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgMduTbocd5vgdLHM3UOH9kldFO5KuB0mkJIj0jPlDrAIgVh3O7k+K3XRiDcu95Cy8kpBVe21vikX6yoRqI+wDeUQ="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.1.0_1550751041095_0.8717853496001844"},"_hasShrinkwrap":false},"2.0.0-beta.10":{"name":"earth-scripts","version":"2.0.0-beta.10","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"3.1.0","winston-daily-rotate-file":"3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"ac405a11b6b23eccea4a8c482400c464d12afd61","_id":"earth-scripts@2.0.0-beta.10","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-vN1DWue3bWTSnwu8P+wYukYJLfEvy5MgCoh5NOgzrLaNEKMDwsR5XLck+cxxM/hGaQh3GwdTniBpJ2+nGhIKqA==","shasum":"e7972925285866ba8e088c340edf6b0029aff933","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.10.tgz","fileCount":87,"unpackedSize":191812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcb5OeCRA9TVsSAnZWagAAWAMP/2Ww+MG8qmiAr7K/1lOP\n5Z5vinUmXMx8KljUeL5NsCnSJu56xwWqatuct+ub+2K/BOoFL9gB5z03G35b\n1NIqn3UlLY6Ux9EWF/ZGSNSpQDv0H/Qx/o/fWq9QBTMdFR6YDbMCIePBrQS4\nDvyEtOjoUGATcSdh43Zgf5iXdT8h6NewZ9odTiUkeyo5FrJVCn7MGV9SMILA\nViEdyyLZ9ot7aWlCj5XYiEjqfTZ/EEbsbO3qICDl/nJ2dV78gqLNiW3sTaze\ncmShMwiLZgo6quHWMufj8B8wIYkKmOFwOdweB0gcNM1wlMuFsq+n1Sz0xHcz\nlUmPQEfSWxReYbRQcjsEsFCjFh5xJi1rz22oEest7hNARPpNQBWihHqRD9AF\nVD4WEZtsVh6HNFjMLFDz+BIbkcLzVqZ+pHgo4rwQO7slquYguBJl1xTT8fXs\nrkTuPptlwnN0TwsQUi7vRcodQTYjV1u4yKDNKtHLStJ7vUEX8rsBK7knw3tL\noiAtJrmwQtKzrnTbwzvP51IMkZvjJYCustzPbCvv2SXVF6zfcn22mlZA8WtC\nCiRd08fKFZOTCwzl8ju3uYLuivzVs8HjZH/R66Yx/KIgZqPohV8FOsZS40DX\ndJ+CtdY45CfA0WHKNrVmWj1rGbzCVh8KJRUCiUEjSwh3A1Bn3vwyvMq7dthm\nWQQn\r\n=hc1Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBcjcLZL39yzkh7PS+rjv1vMmZUCSFYu4IRZayl2JIPZAiAj9WsCzReDfaeL7TseHR1RjqTrW149AgzEJ0OTJxPKlw=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.10_1550816158153_0.7437216619396225"},"_hasShrinkwrap":false},"2.0.0-beta.11":{"name":"earth-scripts","version":"2.0.0-beta.11","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","http-proxy":"^1.17.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","jsdom":"9.12.0","json-server":"^0.12.1","koa":"^2.5.2","koa-bodyparser":"^4.2.1","koa-compress":"^3.0.0","koa-mount":"^4.0.0","koa-router":"^7.4.0","koa-static":"^5.0.0","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3","winston":"3.1.0","winston-daily-rotate-file":"3.3.2"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.5","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.5.tgz","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"81c62284ad65af4f9c22a0bf5027498154527f33","_id":"earth-scripts@2.0.0-beta.11","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-2MElR7quUF4oMkEowOeCCTlzOE4PDlx1pL1IAFPGIQbhEv+ZSNPDsrJFOTXmdUDpTWIHwyXKC0av6PXkKf8v/g==","shasum":"48445a268f88eae5aa649a4bbcbad9a15cf3407a","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.11.tgz","fileCount":87,"unpackedSize":191871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcb6COCRA9TVsSAnZWagAAoiUQAI0g9KDTX/dSmMGXsKTv\nSa2VvnGZqaWoSSkv7VlaaF9yOFW4uDP4pJ6fX4VOZFKV8FUofmn9u+HlAiJN\np5X8aokodbPW0eGvCtnGwqoMARYRLv7hqDxViJocRZOC8a34eWeGcly1Dr5Z\nlh9VolP+74zF7S8uMp9MbPZcV6W3hcCdi2b3stJiEUw4kKsFF5W1YgQXLIuN\n/VizBYwoKU+UEH3GTYUrjRQw2R4EvsPfX//89QoOlCFm0u2pnrkFJQgeu8FA\n72jQjTL+3qS7SUpjuTRhqehb7HBm2yUs7bVtUVGyt9AbOgtp6zd0BQI80Irc\nzrhoeMOR/eXpTVYDdBo9qop49iZeyfQ2d2w/bKBqzk/cF4hiXXtf4TrsB82Y\nhrc+IZWENlTecdj2SNfaiR0CZWNJNeDWxZYc2Xn2ty88yrDhLHbM2pTbE1Vu\nPkh6aiGUr9TKNc/JGTkaPeGTPV0tJ3Oj52PMErHMAUkul3Hvcs+jSyuX2wpR\nnd+y9auEQ5XjMWHT9eyA00EWaAbY3X4EXZggxAdGcBubytf0+XF79tRW3Ycy\n/OvOhCbwwLD31WsJoXhv2O5UPZ2KlNg+9SA+/O29yAsGSwateiRKxmp4+Kzn\nGjF+BI9UKc0F5XYHhVYZG9jrw/Ye+85MD+kXMRH9q0YXmMg8/rR7UaQgmB8a\nd7a5\r\n=HV52\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7AipBWotqZORLUvDmBqd/KJO/mbmwyEuwXNvcLbplVgIgArw6JrAbGt/U0bXYzH83RXfp3md8NO47AWSX8gIBC88="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.11_1550819469893_0.6076142502058186"},"_hasShrinkwrap":false},"2.0.0-beta.1.1.1":{"name":"earth-scripts","version":"2.0.0-beta.1.1.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"851a12c0da845f66c9d4c66696fc2b00b4398013","_id":"earth-scripts@2.0.0-beta.1.1.1","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-KfDCQEWr0799gmRMgicY4jFgh9jVa6ehcQO/6J1FyRg60FuTPEpYIkJmyzf5KQzF2WKMAISto6Mkm3vQ/si7IA==","shasum":"a91a90786fef326a40f3da96e0d804b1e88f19ab","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.1.1.tgz","fileCount":52,"unpackedSize":140266,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJceQnaCRA9TVsSAnZWagAAMZUQAI9ckkDOkDbHGQEZ5Tae\ndUuj03RreMZTemv7vYWfe4OA0ZiUE8+llQczIax+nuC0dsNlZi6o4Tf3KO/y\nmu0QykI/RBIRcS7WQJOZ5GQJArrrqEx7/qeCnNWHdvqQWE9mx/tOUrpcGMsB\ne0P07pLTd8MNvdz8p6FM9Va/z/bT4fRsdJY7qoVldhUAl5z9iEkuhMZjmLmm\n89tufOuGrLx8ZzSEmVcvCAkAZc9JXjCIVBN299tdYj1KOQqw0ux/y6UDB6ZM\nkbhzQZvOVI34lr4OCTeiDw5/p8PorWtlUwFOfdOYSrGD6IApdGk77ThT2Uy5\nYIE/0FEWUGbcdIILyrmmc3St/JUZU2mbHXkmRj1A7/x2goom3ImT3rUz8wT9\npd3G+umTyX6ADtr90cY441wsjUlALF80gsEjZWC0Md9QBrw4YAB0a7JK+FkX\nMH6FYgzXHmnuELadVhAQqg02AW0Kz4D8tH8Smrsr1KvSwSdD+uN7M7Czc2ck\n0iexdi62oOXVC0DJNVXxPF6L4pXYP2+80Cujmd2vxAq6roNdzp1JnysDDpUB\npD7V5tjon0O7E1IxrQ/38c9BxBOLx5ESPnGg43zBA6BUlZhIfeC01LVEhGdB\n9r652BsqFZYXrwi7NBBn/vbzChQmD3YvO4yBJv2ZMkpOqkYFq3ruXKNr2E06\nTF74\r\n=MggX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCG1Hya07QakAIsYbIXSAubvW2Av1EH/qQY5xVWAaGOBgIhAKl3XvP9GEh4B+b5kURQueZgXf8BZyD+jy6NukICNWRq"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.1.1_1551436249708_0.22590880385247813"},"_hasShrinkwrap":false},"2.0.0-beta.1.1.2":{"name":"earth-scripts","version":"2.0.0-beta.1.1.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"11de17920da344aafe92718c38adff3d73d9d854","_id":"earth-scripts@2.0.0-beta.1.1.2","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-NjvHDCQgsS/RO5/EU7LTCNlOppxZoIi1Q/oAgkU6xnEJik3QIta5rKYu0Nb7HjR5pc5RluxINSoDYo7mZ/OSsQ==","shasum":"ac54e222e15aecdf0a4c881ae82b8ad139ed6d5d","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.1.2.tgz","fileCount":52,"unpackedSize":140358,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJceRaUCRA9TVsSAnZWagAAY5cP/iwOcykcJWpuPEFUXtnP\n8Df/o8qXoYrgJ+txmqKubBIG74zMDx86kjuqaUJ2iCza7fqHowMs9eMr7rqy\nnZGvE5lfC77Dz27kmhwWEQJvtP7I87hHeMPerbTovwa4sha4FCG0eU9pR2pe\nwzqmNuJQwDesIdSWiuSVPwG7+Dxs3aQlD70M59xgWrOSHfGYdp8NgKpORF4M\njjYYCFsU7yZHITUDlQkM0oFXMjT6nQaH2oSoIBXDUPkoBmlRanxG/w7WLytQ\nWvNg24j9I9cvCZYiHXtUlscOXqGl3qip8dBTSm0qaAN+Nc+E2cb58lvsMePL\nlxfEfQwEuAQkSUCoPnsirnWhpoww54zXMaCcfumOMvc/82tIPBbHqCTfcZXS\nx9vYeLxidgLgvoYM+RWA8/ChVLLParRA1YSCbvFjtLS/QDTb6zZegOVMHMki\nNBn7prbaZWp8eTpjmSCwBJbUqns2Suc9zlQNjtNAMTxLzRW3yzkiMPBLSw/S\nNctALd9BbKHEyd3Se0c1l8kytF1p5r9BMgsDUSzj6UpQfoESzutb8b94Ou89\n+aDXKtnxcUfbTrMOvt4Btmti6QxksuR+bB8kVMr+Was81vx7sSmxybu5N69u\nIZxFO4DmpwgPG6pyMMjAFEPhEjnR+nYmjqpA7sqs0M8HticQJthCg6JlbQR/\nZecL\r\n=OZ30\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdRBvVsrJIl2GhSBsSAhSNLWHZjVVMBq2RA/dcsT9YZAIhAN7porA/d95EjGQcSOt2MiIz6P1MwBOx0zk3w2OQy1es"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.1.2_1551439508121_0.5563939909326898"},"_hasShrinkwrap":false},"2.0.0-beta.1.1.3":{"name":"earth-scripts","version":"2.0.0-beta.1.1.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"6f9b4160ff655ad840d41f1933f77e0741173854","_id":"earth-scripts@2.0.0-beta.1.1.3","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-NDmeZUGOV08qz84Qpzuue2tKDLApQOkCfH9rhLJ+dul86cSl5LQKdxxziuyFWMHEZ7fHqa/MWgJYsYu0LNWHTw==","shasum":"b675df03d9e5776a83d2c502300c905eab5180ee","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.1.3.tgz","fileCount":52,"unpackedSize":139105,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfR0eCRA9TVsSAnZWagAAOvoP/jKHQfpBDZB/DiVd2++i\n65S0za/c0qm0nlEkPS6fdorV2iouW7MkS5iHQJUrzV9I2f4NxsPdOPlDSReX\nWuWj5PrbMCEdJ9HwHGzOxWIKYsVI6d+vR0QokQnyj57Jekbp1IibFCRMx1gh\npFLlzg9fvFWn+mzLyR57LejCLblvA3snYZgVg5mWc4Ni2mAqk7na2ySaSN6l\nrHqx8M7/OJC0bsoABCWGlgsozvZxYTJVgQYjnoxBT5gGRu/cM2in14EV7ao2\nHkg3VP/7q66S/ddblg1yA/2i9lrB1ozHIiD2GR7qs5kQjCeN4jqutlyGtgnC\nFYeUwtChY4IDP2ygd1Tm9NPJw0NyNwr/70kEmslhYGBKaF2LHyIAiTswcmQa\n0HcKFRTfkk1wI4RxfukymQQ9hX557d86bywx9HivPK5DjwEKyzgNoNB5CZre\nnYLBqDpTMVFhqJg9w/6GWq8FZpr+iNeELi6NSlAG3g0ztaGR1Nyr+rSkAWpW\ntky+smuBAZf3FAHsyxLaLR6ZcbFTVkLH/L/VtxRaCWtRNo4d1xfVdYBMMLMI\nKlZNIKpKGwgji9NZhWIZ3J0XRhmsDzhBVWWrhwfJXGxm5JiywowCVgDIgK6d\nd79NphBlM5q9SoElzt82YAoeT33SIQ5f3QCQh98lDkMPl16kQiYA3umDQJtR\n3Lie\r\n=4X35\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIELMPy1JO6jL+zGl20uvm3kFp61/5RtL++STnn0R9OFCAiEAwCQ8g4AZrO50nVfMsk3EjpMpEz6S7FQ+MyoYOnCV09w="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.1.3_1551703326319_0.4254696082752045"},"_hasShrinkwrap":false},"2.0.0-beta.1.1.4":{"name":"earth-scripts","version":"2.0.0-beta.1.1.4","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"bb57921971b292a464190e43a753c024d16f7961","_id":"earth-scripts@2.0.0-beta.1.1.4","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-VkGinjL3PEAH9RdrRC/YoNZSs7cjzLG7/6sxnje5H/8Jgnrc8vbgHqVGFVzMaQnlheWNjjjvu8miVcoBZ5Zfcw==","shasum":"e71c5977f708dd13ffe97eda0d1bf53a537440ab","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.1.4.tgz","fileCount":52,"unpackedSize":139073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgQm8CRA9TVsSAnZWagAA5pgP/0fcc7/tV31q7cy/sMiS\nsVjSgOu906NOYm4b6zmJpvb1SyWLArgU22gYWZwYrmSpEh7FJEZ2rl+WsUfK\nliLtA+z4SHhZb5KI2zHXpTpDF9ZWBkMhbHAVmfDeUV01L0zpByKdTJOlh+kL\nTre53nw1j3OxWJytsTlIN0U7RkdWfvKkPa/FJpG4tZ1HKth48Kaz2frI4ItX\nspm0wCGszTIntD/3BfxVfZg6AgIIVayP6+ih/SArXvJfP8HjkxE39X98GRyV\nuMWiy16FGe7n9JJ7+iBR6BBh/5y/kBxlOZLZM19mGeVIhAfNlX+U7D/3HAfS\n/wPVYxTgVWAijDv3eb5075oITZ4HhMqwLBbZrn4DpayeZhXlYOKZ362ZM98h\nSxjGy/JsLER0kOcxpsCxbQg0Gv7co0q7e8wvP8/xlz101BnXG66OKsp8tjTY\nb2FGa4Lv1R1GvEymibbkQ4PYQjwUM2jIcbQryoW2Oc0i63hOgT4xr6RBl9Gp\nHkUtbTYcjBB5x+y2t9vxGEf8GPzQL+a3rwY9IfQdL54EiHueLAHaHbaOoKYh\nK7rPdn2xPmccHrm29CZ32bc38fIT3aA4FPckMVgszzJlUQZfiXOk7X60uDq8\nytDnTj4hg2dgmQMuP4Hj5cIteVTZYVjBFKAbaKso2Kw2KVpcXC4gFw6abDgK\nfyLw\r\n=bpq8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDd9MGRbCtBDEvtUXUUfSmYVsgXUYUon2K0yfnWIAvEMAIgAR+VHzlmQ87NPu/jFe32xXxGaro8YJyUL6lsCApUAdQ="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.1.4_1551960507888_0.7079003256268122"},"_hasShrinkwrap":false},"2.0.0-beta.1.1.5":{"name":"earth-scripts","version":"2.0.0-beta.1.1.5","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### node server\n\n* development\n\n  `earth-scripts ssr-start` 启动server端\n\n  `earth-scripts start` 启动client端\n\n* test\n\n  `earth-scripts ssr-deploy --env=test`\n\n* production\n\n  `earth-scripts ssr-deploy --env=production`\n\n###### 目录结构\n\n\n```\n_server/\n  - assets/ 存放资源json文件\n  - dist/  编译后的文件\n  - log/   日志文件（dev环境下位置，部署后会到/opt/nodejslogs下）\n\n\n```\n\n\ntip:\n\n在启动命令中自定义启动文件：\n\n`earth-scripts ssr-start --entry=server.js`\n\n\n```\n_server.js\n\nconst start = require('earth-scripts/server/app');\nconst env = require('../config/server');\nconst http = require('http');\n\nconst port = env.port;\n\n\n\nsstart().then((app) => {\n\n\n\n\n     const appCallback = app.callback();\n     const server = http.createServer(appCallback);\n\n     app.performance()\n\n     app.proxyApi({\n         prefix: 'api'\n         // 详细说明如下\n         apiProxyBefore: async () => {},\n         apiProxyReceived: async () => {}\n     });\n\n     app.init({\n         apiProxy: true\n     });\n\n\n     // 可以添加自己项目的逻辑\n     // app.use(xxxx)\n\n     server\n         .listen(port)\n         .on('clientError', (err, socket) => {\n             // handleErr(err, 'caught_by_koa_on_client_error');\n             socket.end('HTTP/1.1 400 Bad Request Request invalid\\r\\n\\r\\n');\n         });\n\n\n     console.log(`custom Server client running on: http://localhost: ${port}`);\n });\n\n```\n\n\n\n\n需要代理的api，可实现如下两个函数：\n\n```\nmodule.exports = {\n   // 代理之前\n   apiProxyBefore: (ctx) => {\n      // 自定义代理域名\n      ctx.app_proxyOption = {\n          target: 'http://test001.payment.58v5.cn',\n          selfHandleResponseApi: false,\n          headers: {\n             .....\n          }\n      }\n   }，\n   // 代理后\n   apiProxyReceived: (req, res) => {\n      res._app_proxy = (data, send) => {\n         // 可修改返回值 data object, 最后调用send\n         send(Object.assign(data, {notice: 111})\n\n      }\n   }\n}\n\n\n```\n\n自定义是否使用ssr(默认使用)，使用redux情况下不能用默认的\n\n```\n\nrouter.get('/page1', async (ctx, next) => {\n\n    const htmlObj = await new html(ctx, PAGE)\n        .init({\n            ssr: true,\n            app: App\n        }).catch((e) => {\n                console.log(e);\n                console.log('page get file error')\n            }\n        );\n\n    // 有redux情况下，每次请求都必须createStore\n    htmlObj.injectStore(createStore(reducers, {})).render();\n});\n```\n\n\n\n\n\n----\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"fb19c77aa0a5d203ad51881b9cc9004a2fa91d09","_id":"earth-scripts@2.0.0-beta.1.1.5","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-57xNhXlOrVba4Ko3HOtwz65Ikhf86urH3KlSt+6/V/oTGkUFE3Dp1TV8/RJrLdrPkS9Xq2IcpfNuhp4WtQcJ4w==","shasum":"ab188678fcc13433ff856eb48878d8933af972bd","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.1.5.tgz","fileCount":52,"unpackedSize":139135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckFYwCRA9TVsSAnZWagAAN/wQAI29TCOv2M0tLufDEH6m\nbeMUsWiwFifjPuvkyeoydCAfsdztftAVEdvVtbbzpsVotQn8JKju3hRY8OCj\n0f24rsVpQn+uwJwdcQ0i59DsFU/n3R6R/g17YVC8AtxL0M6I6WtGPoF1ElGB\nR8blgIXHRW0tw+MutCw4CoJE1yMOiER+RzJvXJjfxbkXQHKai5N53BjFJSVF\nmEl5e2aC0NONOY7FGQU0XACGxbAO27LJfZ0/vdBXl6kZBspLSgX9X/ar5lO1\nudR4dcdypLYvXf01DreGxgzc/VtLd072YAAiVPFz6ojL1HAlwYlZ0a8/ebuN\nD6WusddsHZO1gBli5+nlH6vk020o5l0J4UkdMWW0l7nqOXZK/SIfFu+QwZa7\nrdPkkunuTw9apoWQWi/Cvnt8a2ReMp9QA+sCmpRqgXHCXFAy6TfIFNH8PfJ6\npAyLWXr96SjmD9D2TUPymL3H9n8zlScvv3ift6M3Pz/7+cutPE3n8bRvpAcM\nFTb+y6yyaTXe9BSxBYvFez8yx4HR2FEdhRNZKw9U93lqgYJ2cLmp8Qx9OegC\ndTEOEbxSKa9JUZR/I6a3OQqbNx6YTBIb+VQ4HVs+RFsxOq/B1vALhoDCJZNn\nmVyG20koPWUP61BAblZr0YfZlODcWwxPqH6xiw4ZheeGzi2S98R0DxuRvPT1\nK9Wt\r\n=/ygx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfFrisQR2B5sfZE7pLiEPwy2ywhy7FOOsBRT2VSJNijQIhAOnSwS4h4h9LGvPSFdPYBjJ1t6s2IOwBEAMlKSM6frlS"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.1.5_1552963120045_0.8533848974831733"},"_hasShrinkwrap":false},"2.0.0-beta.1.2.0":{"name":"earth-scripts","version":"2.0.0-beta.1.2.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n\n---\n\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n---\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n---\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nCLIENT_PORT=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n\n### mock server\n\n---\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n##### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### ssr\n\n---\n\n\n##### config/ssr.js\n\n配置server端react入口文件。具体内容可参见[react-ssr-with-react](https://github.com/kanghongyan/react-ssr-with-koa)\n\n```\nconst path = require('path');\nmodule.exports = {\n    appEntry: {\n        \"page1\": path.resolve('src/pages/page1/indexSSR.js'),\n        \"page2\": path.resolve('src/pages/page2/indexSSR.js')\n    },\n};\n```\n\n\n##### CLI\n\n* development\n\n  `earth-scripts start` 启动client端\n  \n       执行如下步骤：\n           * 打包编译client端代码、启动webpackDevServer(CLIENT_PORT)、启动mockserver\n           * 生成asset-manifest.json react-loadable.json\n\n  `earth-scripts ssr-start --entry=pathToEntry.js` 启动server端\n  \n      执行如下步骤：\n         * 清空build/server下原有内容\n         * webpack(watch) 打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n         * nodemon执行pathToEntry.js文件。当build/server下文件有改动，则重启\n  \n\n* production\n\n  `earth-scripts ssr-deploy --entry=pathToEntry.js --env=production`\n  \n      执行如下步骤：\n           * 清空build/server下原有内容\n           * webpack打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n           * pm2执行pathToEntry.js文件。\n  \n\n*如果不加entry参数，则不会启动server，需要自己手动启动*\n  \n  `earth-scripts ssr-start && node pathToEntry.js`\n\n\n###### build目录结构\n\n\n```\nbuild/\n  - server/              // react build for server\n  - static/              // react build for client\n  - asset-manifest.json  // static files map for server\n  - react-loadable.json  // loadable files map for server\n\n\n```\n\n\n\n---\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"52de4ad87fbf5b347bc136280733de4dbaed4307","_id":"earth-scripts@2.0.0-beta.1.2.0","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-+w1ODiDJzGs1xvtwm45bvmPE6prITjjgU5kh840AM03OKVZYMmPmcPEr20PfeUT/X390ME+XMD9Uk8U/mft0dQ==","shasum":"b9f1baa3be8e7afc2c61b5e8a9a9d7d2bd6d2043","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.2.0.tgz","fileCount":52,"unpackedSize":137320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJck3kVCRA9TVsSAnZWagAASWsP/RYwtz68PWzxHPQyh9Vm\nPhTPvJIlkfMfXupUw43SvBrUGlzLhdROWVF+idk0VhV0syWhKZUlIwDxe0fR\nqpwX+Wy0cOWOXzdRrl+5BzGWyEbA/P7taWQ3dsXNs6x0zMCkJYRwA0BLLFQt\nwSQoC6YmV1HfQl5XJZ73wSpqY7b67mSF7sz2JJNXrQT0hA4dIBWQM32rZBjb\n42y6sYy7Xt3peaEInKC2EKapKXIwNn0YRoxSP3cX7aguE+T2gQ6Lrh0m17OL\nekGJKv4+3jOAh1Mnk6DACo91OXOgshrcYtRSxHjOuSqfOLNXWU2F/N9MteIg\nL2IBhFYlQ4l88jdr8HmHwOgp9G7Axf04+u7o05QJFvq9L0pkuGSAsH1mU5io\nhLeO3g2PZQ4MLZ2A632wRKUu/BnLXkA04qa754vYCTi/hul8yoK7dYEreUy4\nCUj16MXLbLPx7ifUabpvoGeXO59uQfJCssu7NHP5GPMErWQRSYqLH6igBzOX\n3TbP8O31LtYuaepfArBW6UTFxEBDnkLmzgTgbp1gWaBMnOmmiLFOmNfjtRVV\nBmBBCJzDWMzYcgsAil2KARpuxkqaudzFSu3o1mRLlnX1VtZoD5Uhy5sAl1FO\nVU9hitFao7RkKI9QaMBCiL1ySxUS6j25XcAQ+c9Gs7yidCxWxzxsBz3o1xEj\nvvJx\r\n=qBUs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnuPz4yllwIafaa3KO/a6IQGeZ8rdcT8puPXtno6SV7AIhAKn1pty7YH7uRnG3vqCSDr6f4nkEqhcQJdilBmkTU9sY"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.2.0_1553168661252_0.15517155881904587"},"_hasShrinkwrap":false},"2.0.0-beta.1.2.1":{"name":"earth-scripts","version":"2.0.0-beta.1.2.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-conditional-loader":"1.0.12","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n\n---\n\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n---\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n---\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nCLIENT_PORT=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n\n### mock server\n\n---\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n##### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### ssr\n\n---\n\n\n##### config/ssr.js\n\n配置server端react入口文件。具体内容可参见[react-ssr-with-react](https://github.com/kanghongyan/react-ssr-with-koa)\n\n```\nconst path = require('path');\nmodule.exports = {\n    appEntry: {\n        \"page1\": path.resolve('src/pages/page1/indexSSR.js'),\n        \"page2\": path.resolve('src/pages/page2/indexSSR.js')\n    },\n};\n```\n\n\n##### CLI\n\n* development\n\n  `earth-scripts start` 启动client端\n  \n       执行如下步骤：\n           * 打包编译client端代码、启动webpackDevServer(CLIENT_PORT)、启动mockserver\n           * 生成asset-manifest.json react-loadable.json\n\n  `earth-scripts ssr-start --entry=pathToEntry.js` 启动server端\n  \n      执行如下步骤：\n         * 清空build/server下原有内容\n         * webpack(watch) 打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n         * nodemon执行pathToEntry.js文件。当build/server下文件有改动，则重启\n  \n\n* production\n\n  `earth-scripts ssr-deploy --entry=pathToEntry.js --env=production`\n  \n      执行如下步骤：\n           * 清空build/server下原有内容\n           * webpack打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n           * pm2执行pathToEntry.js文件。\n  \n\n*如果不加entry参数，则不会启动server，需要自己手动启动*\n  \n  `earth-scripts ssr-start && node pathToEntry.js`\n\n\n###### build目录结构\n\n\n```\nbuild/\n  - server/              // react build for server\n  - static/              // react build for client\n  - asset-manifest.json  // static files map for server\n  - react-loadable.json  // loadable files map for server\n\n\n```\n\n\n\n---\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"71598bb9d24eff7c53ff16d77f8dd5ff64dd352c","_id":"earth-scripts@2.0.0-beta.1.2.1","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-Sp4qdAI7V/peAcDDLuzbD++Rqo8JNlG78r5bbFln2QDtxtj+exESBEofkbMBVzxmXKa0qrEmarM1NIBS2XG2JQ==","shasum":"438085caa3dfad3a126836746c92902e13cae0cf","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.2.1.tgz","fileCount":52,"unpackedSize":137595,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmcTFCRA9TVsSAnZWagAAI/YP/3XrUG/S2cQpAGgyGe5S\nkHR2fS4b5i0MbxXe8rbiljMyjUUmq0yyGOVbIucN4y7XJu7PMUd8AtDNLQab\nDAeMIRcEsu2bCrdv4/RCmoTa45mRzIszogjun0KqFvV12li4Cd6c4A580EPA\nMStsjjwE2grlqpvkf5kzXjqn2/iwPto70VA2+TwOL9lyVm1KQQgjJRIvqXkJ\nUeKJ5XvaR66SxxwP4pbXu9doqscgzL2hioBKR3qJjpIKzGnarxu30BvuE8TL\njKCdeaPlQKo36bssMM8t5+E2wrs4BcgWEMmfZrHnZLpKa7zzV/M9DACBJf3a\nJkXyKdjWhkPg5nBJk86KidialEm4dLIyUWVx1oK+fKa5Fe02RGgf275kfiD3\nnpNK+eh3AE6NB/BEbLVL/JZ4vAaeC0gJd9+l64Yg+0bB9RI6by8TudyVaky6\nnObRZLtGBJUnjzJSw+Jyj7kzSOfKiZhg4yH3dtFlUPujgKMH4oNA7Zw+8CF9\nkNElwkFF+d5VD5hmdsOGSPxZJ0BrGWcH3o/pc3nnKCTMJf9NEo2S0/YEOgvw\nh3a2RqW2KYVXj5Ay4iBWRw4POvsZPMkpYcFYMatAMHEA/pJtIKQXAeUSRpjx\nVSWHwTjIcl+V8pmqXOQ3gzcoS/JWGDH8+fiERLSNwqXrK/MJ8kSXFQ3R60Qa\nTaHN\r\n=NAFL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLJb1zDV8BPs7cin0Y0sTodO0osFL3T3sIeUNIBmN/BgIgan2tDr3RzX2GnnlNmuRKOx4W2qFZO/ZiL5TO2pohMyk="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.2.1_1553581252658_0.6277357387666593"},"_hasShrinkwrap":false},"2.0.0-beta.1.2.2":{"name":"earth-scripts","version":"2.0.0-beta.1.2.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-conditional-loader":"1.0.12","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n\n---\n\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n---\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n---\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nCLIENT_PORT=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n\n### mock server\n\n---\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n##### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### ssr\n\n---\n\n\n##### config/ssr.js\n\n配置server端react入口文件。具体内容可参见[react-ssr-with-react](https://github.com/kanghongyan/react-ssr-with-koa)\n\n```\nconst path = require('path');\nmodule.exports = {\n    appEntry: {\n        \"page1\": path.resolve('src/pages/page1/indexSSR.js'),\n        \"page2\": path.resolve('src/pages/page2/indexSSR.js')\n    },\n};\n```\n\n\n##### CLI\n\n* development\n\n  `earth-scripts start` 启动client端\n  \n       执行如下步骤：\n           * 打包编译client端代码、启动webpackDevServer(CLIENT_PORT)、启动mockserver\n           * 生成asset-manifest.json react-loadable.json\n\n  `earth-scripts ssr-start --entry=pathToEntry.js` 启动server端\n  \n      执行如下步骤：\n         * 清空build/server下原有内容\n         * webpack(watch) 打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n         * nodemon执行pathToEntry.js文件。当build/server下文件有改动，则重启\n  \n\n* production\n\n  `earth-scripts ssr-deploy --entry=pathToEntry.js --env=production`\n  \n      执行如下步骤：\n           * 清空build/server下原有内容\n           * webpack打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n           * pm2执行pathToEntry.js文件。\n  \n\n*如果不加entry参数，则不会启动server，需要自己手动启动*\n  \n  `earth-scripts ssr-start && node pathToEntry.js`\n\n\n###### build目录结构\n\n\n```\nbuild/\n  - server/              // react build for server\n  - static/              // react build for client\n  - asset-manifest.json  // static files map for server\n  - react-loadable.json  // loadable files map for server\n\n\n```\n\n\n\n---\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"154e43e7108b2dbd9e0bad06255edbae93016531","_id":"earth-scripts@2.0.0-beta.1.2.2","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-yG+fJhWpDqswZ1XRlhz6bCmV9EqNE9DHxM91rUC4Fdzs/Bkufy622Qsnoe4Bd3Xy2jLdewMst1AYBz5HmCP4tw==","shasum":"953a5e2a74f9b61243fe9c6474996305df05beca","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.2.2.tgz","fileCount":53,"unpackedSize":137507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmcmlCRA9TVsSAnZWagAAl0sP/i2D/Th0/U1pCOC4LZHz\n/VcJOnmLHl7P2nUo/IZbxGDrdXO+FsecH0Z1UitjsHujApwF58VEjn2+inb1\n/uGN9DphSXbnNrnc6jW0hd2UhicUxF4Cyud2/5ueW0gNp6CHBleQDX65ZdF/\n1LBin8LI++WmJU4gn5sx0FTED4p0kWXif6nSXurAHGwoPBw1fzWRKhSStZqK\n2C+BcntwFw1wtz8k/nCHl5MDcSkuf/LYUYbNbtl1uo6HL9Dl7RSBhN0txE3x\nEA7F+ZIDVwRED62XOz9YLaN7oPS5cjCefrErrG4SswnblxTI5X9Y03Ibi/UR\ntoDga3dcroKc/oAhBwgYP/EEkBOzKwGEssjQkW5tCQoXnkQrc5wcjpOmC3J1\nJU8pqS1Xov9apmh3pl6u9qLfJ1sgT6y5SgiAweJd76yDcIB9ffoaXa7+C7dT\nn8xLPcJdArfASln6my5sVbuUlkuMELoJ4rXYZDgVXahWMOd11NLO2WKZe0Ti\nLikHq93cikhLDo1Wp4uN96+5CdAHSerxkoeqGwqYp23Tu1NzUnoeSkNn/LlF\nebVEAsnK3Eg2iQaZeTu2ekko+3lzoAWf8T2IoGYLZW9Jx+WkjsDVr7plkgQD\nkdUj/rXrHNrMxBNsPhhvYXyIBQIG7ZzSG5TdCLU0mPWnPwpCFbz7WdyJrNKF\nsxQo\r\n=sFFm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDI8em64v3pY+Fzik1x7lAo689DFiwqGEXcPEvjjF/DYAiEA32lvYQOrH6iatm7YtYQUjhEDzqPK8wzXuStcWKoARSk="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.2.2_1553582500993_0.4869978959074299"},"_hasShrinkwrap":false},"1.0.7-beta.1":{"name":"earth-scripts","version":"1.0.7-beta.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","readmeFilename":"README.md","gitHead":"8347ebcab3ba37f4de2fc03c4ccd70b7cb6588e8","_id":"earth-scripts@1.0.7-beta.1","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-ulc1EF+TXGjSy2xNqVsVnAQiBp6oZnKt+R/rC7zgqyYNC0OelMG0P5k+S8Tbf+M6Q88IksTEJX9hqkylVKM1ew==","shasum":"4a9cde226e816056c0eeeed132ee295f1857fbb8","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.7-beta.1.tgz","fileCount":42,"unpackedSize":102485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpFiICRA9TVsSAnZWagAABuYP/jjt7rk6U4qd+HFU+KcP\n95tV2F7K9BdWgu15S1Q3hcBTHerrfEOBGvDCxu9HCyMGkJRALxhlKBGYG2JL\nf3COY5osw4i1DSEiQmlT6ywHw0kELFd+nRci7CCQThQwuGlz+8ZtlGOGPj8Z\ngcILhXSdw0poseIIjfDdAXBHQ2dW9b+62eXFtftBi8YZpv1ELUlDNRH0xLol\nRDocz8nRGR/Us8G+NNgiqNGrRQZAQW9s0+LsDQXlFVWEKbWL+auEyCmZVEtR\nTvshVIqIQ2dicMqYcnHVmTKOBLBXWqPgYOSPLrz1JrXjzcIV/y1kmIVJpO+0\n+cV75uzioeWEO0tia/xaJi63OpVYoNg+zGbBfVo96CjyFCH+wLxc4gP2UrnV\nGOUBQFxCpICPhTaybATZjcnhFkdzO7mOc0ykSLz5wv1DQGySirioRNUfepoq\nALizk1C37y0GoX2C/Jf1ldAhowT4brQ+iAD8Xl5Kpeex0RdGBtYnchYs3JnR\n340eZFp4Y4SHClA+423tp6MGC4qNBRSregDq574Jz26/uEsFMwbU0IYmk6PI\n4sRj83I4kZfLrcmWdnm4JcQjEZPMGwV1Z7K/HKFVGNt29mNNdcJC+vSpP4up\nzPggHRgX8uDNAWm5atbDlQkInojeUehcHiZMhQrxn+6AhLimvDp//fAsqLMJ\nIhBB\r\n=EQvd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHM9jsQ/4rWlyhQXg5Pwpnlq/XrOwkdZdRk6moJF6ZyPAiBv1NTjDhI7+1cO7Dp5dv4xim3tcBVG3VDHLzpTtKddFg=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.7-beta.1_1554274439571_0.9533158104072244"},"_hasShrinkwrap":false},"1.0.7":{"name":"earth-scripts","version":"1.0.7","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"a6386013a8950cb93e00ecd8ee1ee60e4443e0d6","_id":"earth-scripts@1.0.7","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-YQvsxN5sihPN1Xim0kJ148ycVsdG3FpV+U4AxvjD+m0KXIXyY9RN4bJkj5DR7PItQDD4Yoq8vPbX2B//C6ym4g==","shasum":"f8f6238204e0bcbafee06497c94238705096894d","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.7.tgz","fileCount":42,"unpackedSize":102494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpHUFCRA9TVsSAnZWagAAuYQP/3B81g7K6Nw3PofcZcwp\nYmxBHtpOVcN6ECWQUau21r2iOIq6L7TZ87osJxjTNXkJfmQWH9YtZaH/V7VC\nujtj7otrLlk6o9ByJ+Kg4alsQ9ai4z4wDnN2ypghr/ho336rPUEh3V2cOQv2\n0WAv/xDsqeqjI5YQQXqAzS9+7mxJk+jOkDTT22uTd+wbGz0Qtza9SVoVpIn/\nSmEJJDVm6fZvLu2KACHxIXy1iFD9GXiv8EOVbaFlAAvHu4QPD9t9xXE6IXTf\nCwPh/h8eHcvzqWT5y4K6unFdtdj/AUsynolOD7nuMe1mvcBRWr1nNgbAyZdZ\nkJuOwpcr75yEg+y3kRXBis4Jv/BRr9Y5fuby8cxPjvFRqNlv5v7VQZr67e7x\nSU8gIjv4z0J0ZDqZNrbjkLGL715Bu/jxkXSHyajwwtg1Up6tUnIFMVXnX0Fv\nA+wRgY6NoGRiMuHrMosr2zVDcLzEf6Rdsgyi3/Ro9knYbibZkmeoFepcsMnX\n4lfIc+dTBrylc6nqmPgO392Kxg1kVOvfaZO5rvE2vJ4AdBZSbDEsUfpmBLEJ\na2M4TbfdTwy7da1a5LQsQ2GG8eipjOcJrvzkKTEa9EMbjtDoGM90AUai8UM+\nq5Hv1zY/5sj0fUnuFYFJE/IviVx4jU2UgQh2/mUNRyIYR+Kq8I4CLOPS64KW\nNLEG\r\n=da9v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJiyY5cEjjf1PUWMwrRJNSzIxc0TJLk+LX9C8BSW3OowIhALpRwzizGHyI6E+5jxPoYJcF7tJh/fWf/YPSRrFApNUY"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.7_1554281732842_0.5874661416873546"},"_hasShrinkwrap":false},"1.0.8-beta.0":{"name":"earth-scripts","version":"1.0.8-beta.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","readmeFilename":"README.md","gitHead":"1a103c23e7e8e1032321b02177bef2d4eac89917","_id":"earth-scripts@1.0.8-beta.0","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-Z3TIXgUMSSek9kPp0BE1TIRF6qBPy2xbQvG+X+VCBYl1EkYAm5Rts8HsTztb+b+3roUtbOixowzgjgbxxZ1E2w==","shasum":"9c1c315660609f7d1ed16c19348eaf0754e9f5a1","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.8-beta.0.tgz","fileCount":43,"unpackedSize":103259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpaRZCRA9TVsSAnZWagAA9swP/jNoF4gEmGNQBYJIh3Ei\nXEidsteINJ0pRkkrZAneBUEHmPzPtslcdhmQeOkAPBG87fOBSroFaOhg3tVJ\n1CovTNlPBJ2eMFcUVAQ3+e4lx6yyjO2009FapejOCTwBTDfX0msRwkK6XVqN\noAQ8OSv0j18auuLtOVX32jpuHHgxm3ToLt+j6ozs9kVf18VBCEauIWPeui1Q\neiXUn5leQifihh/DuU7lGhycyQkC2XTPWaoySS9ccsyv0yh3Fr/TYoDNanwZ\nfJmQkBbj+GD6bVJK2ReLEJJOv96y2OXyh5jHZdQ6W8R3rbSl7hVI99dp1ZJQ\nUV8KsMS03sqrYSMw5sZL4yLT72iH4+TVYMAE2xpKAvicFXRumo9Q4y86460g\nIRPd7Iso4xdX2mvSi/+WKmolmBnjpnGj3HAkoh/PBax9DrSeOXrAV4h3JBZ5\nt3+RMhoYhPG1BqLLIgzQpwSA8p+gvTdFMAVN1EPiMi41H5WiqqnaB0JJYVNz\nI0qzFftCErVYPg3pkBKbBYxpYf5JFkdU80u8bTssTipoWlGsa1ByXKjnAb6q\nRsb4cJgqj12BROzrV3kzMhgf2Bhn8vayqUMmq0rSWOsMXE+FTpEyYweuNulk\n4rErSPqr9bX3U6hcPEE3Zr0HnBZMCXN8N4pfkv3T5+mw09d/C8abPmlYXu3a\nvTb/\r\n=rmhj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByR/hGOlKvtCbFVQSZdQAT6OFK9JfcHitgeRX+/HevFAiAbguVvKntZXsCB1RgYsNZFUFsP0pVJEJuTlo2UEqi0Jw=="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.8-beta.0_1554359384401_0.10627156899589196"},"_hasShrinkwrap":false},"1.0.8":{"name":"earth-scripts","version":"1.0.8","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"1224ccad816b581cc967c543bd05a1280788e4e4","_id":"earth-scripts@1.0.8","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-1R2j2VD8wBOhWIzsYiJKnJZO/TeLWJsE/w1jytJ7nW/nE3H3ChlRjUSMLTJ5uPRBxCntPi3HKwCXwyby+W3L4Q==","shasum":"aab603d594b87c2486f846f3fece88f3f0788b00","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.8.tgz","fileCount":43,"unpackedSize":103252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcqzYwCRA9TVsSAnZWagAA59oQAJjvcjaW/VC24zW1ZCRm\nvUmNKRnhRQb7N7RgBFap+/OgXACcR5w7OhFQ8mNROuIbYIvTdPHbF7y59P5v\nU9d7NCBw2di/SQSSQmvk05buXJnl8j72HALKhw5AVzUzl0bkgVVakLkeZOrG\ncKfUwY9IBBn0eV+df3K2dX1E/7e1+/H3aM9KzFplKu5YFgTUdi+89R5sNczz\nPHfxgmQiGw1uAoUxNGNuin3S6/oNSDZq53M4x+XbZHj2YyYGWQ9MsXuDiL0I\n3DZTdFoSmEVi043kJPWrRXqjgDcefduZqyOj8wD5FN47dLM0BYOGlTCNEef3\nbFxCsBPJVMKx7UDPYo2NesV+D/34ZMTi8C4F2GK7QoRm2fKNtGZWvbntzCiB\nvEBFT6Mw7AhrCE3lsMCalIq/Fr1qbN9jzmgJW56d6ebTWcAAE6756iaksXDE\nkbRvCL7mD01l4tf/lTxcQStYYO47obyFACSwqItPZkwqa2G+OOhLQ+v7uWgp\nka0aCKl/XaFQOi3at33V+++Zj2S+/MJIhiSwVYwltoq4uOzLXir3Vpkj6hqy\nO6A5kuppHIe0Z2XpWKu8oF69/Qw9RiAhKs31ETeduhGhu/Lm9ARg3xpJxWst\nXRAeTRODv3dws4ICMtHAmP5Um2J7/lRT70Is02w57ObzFW+MT5GnH9h+AIJG\nmlvp\r\n=8Sgc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVhxPGRoWImcCNuYiG/v/GG2YCybHjqiMWSrxT0v9ZWQIhAId7vB/ZojqwdQBprVzMAOQhVCwM8y5QwV4RR0L50PVF"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.8_1554724399315_0.31191945433815826"},"_hasShrinkwrap":false},"2.0.0-beta.1.2.3":{"name":"earth-scripts","version":"2.0.0-beta.1.2.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-conditional-loader":"1.0.12","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n\n---\n\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n---\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n---\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nCLIENT_PORT=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n\n### mock server\n\n---\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n##### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### ssr\n\n---\n\n\n##### config/ssr.js\n\n配置server端react入口文件。具体内容可参见[react-ssr-with-react](https://github.com/kanghongyan/react-ssr-with-koa)\n\n```\nconst path = require('path');\nmodule.exports = {\n    appEntry: {\n        \"page1\": path.resolve('src/pages/page1/indexSSR.js'),\n        \"page2\": path.resolve('src/pages/page2/indexSSR.js')\n    },\n};\n```\n\n\n##### CLI\n\n* development\n\n  `earth-scripts start` 启动client端\n  \n       执行如下步骤：\n           * 打包编译client端代码、启动webpackDevServer(CLIENT_PORT)、启动mockserver\n           * 生成asset-manifest.json react-loadable.json\n\n  `earth-scripts ssr-start --entry=pathToEntry.js` 启动server端\n  \n      执行如下步骤：\n         * 清空build/server下原有内容\n         * webpack(watch) 打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n         * nodemon执行pathToEntry.js文件。当build/server下文件有改动，则重启\n  \n\n* production\n\n  `earth-scripts ssr-deploy --entry=pathToEntry.js --env=production`\n  \n      执行如下步骤：\n           * 清空build/server下原有内容\n           * webpack打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n           * pm2执行pathToEntry.js文件。\n  \n\n*如果不加entry参数，则不会启动server，需要自己手动启动*\n  \n  `earth-scripts ssr-start && node pathToEntry.js`\n\n\n###### build目录结构\n\n\n```\nbuild/\n  - server/              // react build for server\n  - static/              // react build for client\n  - asset-manifest.json  // static files map for server\n  - react-loadable.json  // loadable files map for server\n\n\n```\n\n\n\n---\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"1f428f7de1436be8760e9e21bb7b79a03b48c895","_id":"earth-scripts@2.0.0-beta.1.2.3","_npmVersion":"5.8.0","_nodeVersion":"8.1.3","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-HY/+AI12xHgLqF3tPUMjID4TdM13hDdaHK1Y1w13ZSnU9arB74Ifl0FlA2n8SkN8dgRxeaLCLL2dYuQIQscS+g==","shasum":"276602429e34590785a3a33c7054da210c592ee3","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.1.2.3.tgz","fileCount":53,"unpackedSize":140461,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcwYUOCRA9TVsSAnZWagAA5PsQAKIzaWTUXPSMJUbpM6ZR\nyO4dU/SXz68vF+XFJlEIF+qX0NtC9sg1IdqzkOYowhmAFnG6IagswMo01gQp\nihLb6zt6HJ861M6o98KiRzFNG4nTVGPHoFiYN2c19PhTYdAGgnF2mv45Kq5A\nY3e8V3o+JjZ58HPZpO2qkVcT3EzQBOj86JRODT5gKlZ281Z76j+YZR8G9T+o\npe/MoYSfU0/NNhmENtSkfYzHVNKiRj0fWc3lMTU6+jxa6ZZvu3yIAshPOZJn\nCHaGl71a/MfzaGrvrg+z9ZqYu6m0a+9NKD93MCqEm5GnSiEpkIpSOhcJdFEK\nLJwhL1D15zCCS5M1Rf91fpYPZjr1ecSbuQKM3r0XfLQG8nZxnZfyaJ2dHKGZ\nTSetm6RNV4pZR4rTgU8pWNOSSCWT0gjwDYA/In9oWtMXQCmB+2jpFoahJHZt\nWVQHmZGvueqt1geuiI/PokruHXMHfLrxCSJNeHh0H+E0p6tPJrr3QJ7QqbcE\nUWdZVcR/clX0dZvavrJOjC2kU+pEjrXE2Ztoz1tgvTht4FySSpgntZgAHVfz\ncLpmo7I77eqvJ7Qnbybo5Efs7avPSN3nxuRFuFzthjapxQuUgGxKfSslrUsi\n65UGZdA24bkwWISMuVxgjuWzXd+suyTmTPEb4c5as2HPhPHt4M66Np5nbZ+/\n+aTe\r\n=kBwf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGVFvPpbiq1l5ESvsHp3UTfdnBnLsFsA5aU6vbgUZQOAiEA6ecNW6/eldkKUiVhI5OM52e0CtwEYsQkovXULveDMSA="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.1.2.3_1556186381485_0.2473251440320574"},"_hasShrinkwrap":false},"1.0.9":{"name":"earth-scripts","version":"1.0.9","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"a68c98da08955645a35e895ded63a9d6d03197f5","_id":"earth-scripts@1.0.9","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-IUelLdeuB7cKKayZgJTUubZNeP1v8FMMkV06w+1+xg6ue8kY0b0+xodaTKcUCeu7fRhi0ZL64+0JAwQk7X8ZGw==","shasum":"e89bdbee1b49db650a1b20bb2a1fd73de534a972","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.9.tgz","fileCount":43,"unpackedSize":103441,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5LPPCRA9TVsSAnZWagAAyXEQAJ8RrvBrpWog80C52oKl\nF3Rc4685m9Y01VQ2R0C1Zleu4dKeXcF+7319lQqAWaentRrGMskalrEskNgJ\npWIxMcGVwqX0FBdfnetXHatyE2QGd03SVXaN3+1QA7o0dH1mWkaQGGPJKCKX\nSLx/dsFBdsM3M9SMYbOxc+5NMbCwO9qVO8HY3sMUx72Vkv6yJ7mkBfB+RaAa\nfCUb3ZMTX5vdf4m3XyMzTwTBhkIsq+Wsb+ZcV8gbZXuGZXgAWUYRcev/X1Zu\n8Dsk5UpzP6fPJPL2S2jqJTHhPM9Dj4KnX263aSKzSebNUn3sD+LUpocEDMih\nwOSn9URZxKN3ZnQKWLsUrSYqM/yXpVq6AsLDpElBJJ4Eu54DpiZnb34HdQVT\n0DhJUJfZHdieBiFFF8S+ybQQ7YC3cZCAnHjPHTOfIvD80UCAW+LAFr38YqfX\nZdKd5lhxZAi90yMrZ7npWZj1ZzleqhzUGBxeuY6tdBoKnEnZoUIyUgFG+JBU\nPczKvUIgq74Hau7ZNCX9redTmjRvTCpiM0daKMKqgOAX2ZQvzBQrSiZKWTiq\nUiPcoXMlMB4Mx+PSXzZB+ZSAYy3lg8E4eiqvIUErcUV58WqvK16S+LxPVe48\nr6r7fDkRMjyWsYb9VzxzKUpjicBe+UelZ/fJWXAM62Oh0nvzXmB2SnB9/Gac\n3PEq\r\n=dRvB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFywjUhbG1G2rXpoCFwBmkBZr7bH0qzhyg37CZFTvsmgAiEAwpxnhQlKlMpVlzdHfose/XqYMw0JryhfXxEFtHldAsM="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.9_1558492110690_0.17322855020628092"},"_hasShrinkwrap":false},"2.0.0-beta.2.0.0":{"name":"earth-scripts","version":"2.0.0-beta.2.0.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","typescript":"^3.5.2","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-conditional-loader":"1.0.12","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n\n---\n\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n---\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n---\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nCLIENT_PORT=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n\n### mock server\n\n---\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n##### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### ssr\n\n---\n\n\n##### config/ssr.js\n\n配置server端react入口文件。具体内容可参见[react-ssr-with-react](https://github.com/kanghongyan/react-ssr-with-koa)\n\n```\nconst path = require('path');\nmodule.exports = {\n    appEntry: {\n        \"page1\": path.resolve('src/pages/page1/indexSSR.js'),\n        \"page2\": path.resolve('src/pages/page2/indexSSR.js')\n    },\n};\n```\n\n\n##### CLI\n\n* development\n\n  `earth-scripts start` 启动client端\n  \n       执行如下步骤：\n           * 打包编译client端代码、启动webpackDevServer(CLIENT_PORT)、启动mockserver\n           * 生成asset-manifest.json react-loadable.json\n\n  `earth-scripts ssr-start --entry=pathToEntry.js` 启动server端\n  \n      执行如下步骤：\n         * 清空build/server下原有内容\n         * webpack(watch) 打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n         * nodemon执行pathToEntry.js文件。当build/server下文件有改动，则重启\n  \n\n* production\n\n  `earth-scripts ssr-deploy --entry=pathToEntry.js --env=production`\n  \n      执行如下步骤：\n           * 清空build/server下原有内容\n           * webpack打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n           * pm2执行pathToEntry.js文件。\n  \n\n*如果不加entry参数，则不会启动server，需要自己手动启动*\n  \n  `earth-scripts ssr-start && node pathToEntry.js`\n\n\n###### build目录结构\n\n\n```\nbuild/\n  - server/              // react build for server\n  - static/              // react build for client\n  - asset-manifest.json  // static files map for server\n  - react-loadable.json  // loadable files map for server\n\n\n```\n\n\n\n---\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"17b31d87a6843de2f22ec11176c9b4a9611f1d9c","_id":"earth-scripts@2.0.0-beta.2.0.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-zoIP6dX1hmG9mEkIEcvPjeX9OuJL2SgShAVRIXJnT4sljQtewATh70rNs559SvR0bt8NTVm4zMCsdjjhnTKriQ==","shasum":"5cda0d29b40ae4d946fcc760744c100cb3f1d13c","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.2.0.0.tgz","fileCount":54,"unpackedSize":138796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdB4paCRA9TVsSAnZWagAAj5IQAJbBsWTp7h5TLYaJo1+/\nU4kSMFaBR/k6FL9SxGQ0mV9Kbf3rNjqn0KF2leKTlqNNW/lS50cTil+lHysG\nq/Zn8Kg/CoACqvR/Hnr3ZYL21X+0BPULgVS50pX1VI4hs+s82SZ4atKjlXGG\nZXgKeJQ7JtCZhEdYc9/tb4r/+53Vu5ID5+MbVsV7MJ9m1Xbc+yu67LUqOz0L\nt8ZPosezd2NJBO0pufLntHpSR49s3GbLrlPp+0RsZ1Sn2leBF7syxkSelJLo\nz5nAcWVcJbe6f7C1WpsXT2VucAHtqlE0hmvokv9Xj8fSpVWJ3aWjImlpnUmN\nAhrCNlpN25eJAdF5nihx9j3k3IYhjsgmriH5/lBH+uvaARKnP9JwkBcYAbUt\nD53D42JrcyIjKyUJK4VedyR8iW7w9huKjPaAVaFhCUKmduK+VjC59afgyYaY\n/Q6yRNDsEL9rV4SUmyJ7kmd5GbOEaA5ngRPnhBWNkX1o2lh6dXyrBEO87Rdr\nzLF5np4zK899iv5deqw/b/2zChTcUU3BEhUMipQ/bP2EthkPiv5ZBp37TSY1\nHu40Fmj/MzMrnyEdIt/HmlQ8VWkZv9psTa9NYtzi4LEs4tkuUp1ULco3NQmW\nUh16iul6jms0CiVvMnIBv5unhvo/M/zed4h6jNtRuEAhylx+McVfXVCYzRbd\nVko4\r\n=GlJZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCevbe8TLswr6ydq4/SZAL2VeGiM9rMFFK2+FH6dcqPFQIgW02waalN/kA/xEAKooqiHkxLvu0nATVlt/H5T0XKJTw="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.2.0.0_1560775257478_0.7181871645725002"},"_hasShrinkwrap":false},"2.0.0-beta.2.0.1":{"name":"earth-scripts","version":"2.0.0-beta.2.0.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","typescript":"^3.5.2","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-conditional-loader":"1.0.12","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n\n---\n\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n---\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n---\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nCLIENT_PORT=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n\n### mock server\n\n---\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n##### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### ssr\n\n---\n\n\n##### config/ssr.js\n\n配置server端react入口文件。具体内容可参见[react-ssr-with-react](https://github.com/kanghongyan/react-ssr-with-koa)\n\n```\nconst path = require('path');\nmodule.exports = {\n    appEntry: {\n        \"page1\": path.resolve('src/pages/page1/indexSSR.js'),\n        \"page2\": path.resolve('src/pages/page2/indexSSR.js')\n    },\n};\n```\n\n\n##### CLI\n\n* development\n\n  `earth-scripts start` 启动client端\n  \n       执行如下步骤：\n           * 打包编译client端代码、启动webpackDevServer(CLIENT_PORT)、启动mockserver\n           * 生成asset-manifest.json react-loadable.json\n\n  `earth-scripts ssr-start --entry=pathToEntry.js` 启动server端\n  \n      执行如下步骤：\n         * 清空build/server下原有内容\n         * webpack(watch) 打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n         * nodemon执行pathToEntry.js文件。当build/server下文件有改动，则重启\n  \n\n* production\n\n  `earth-scripts ssr-deploy --entry=pathToEntry.js --env=production`\n  \n      执行如下步骤：\n           * 清空build/server下原有内容\n           * webpack打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n           * pm2执行pathToEntry.js文件。\n  \n\n*如果不加entry参数，则不会启动server，需要自己手动启动*\n  \n  `earth-scripts ssr-start && node pathToEntry.js`\n\n\n###### build目录结构\n\n\n```\nbuild/\n  - server/              // react build for server\n  - static/              // react build for client\n  - asset-manifest.json  // static files map for server\n  - react-loadable.json  // loadable files map for server\n\n\n```\n\n\n\n---\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```","readmeFilename":"README.md","gitHead":"7032d8e0b77f68b1b7391db2e518af028a513a9d","_id":"earth-scripts@2.0.0-beta.2.0.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-UiI/poKHDZNN35gKiYyV7hGdSBTGmSf+mGC4XB+g/Iq9jnlPayzRJOeF+CLv/adeEtOOAr0RkSilC4G2BoRcTw==","shasum":"9dffa4b176dc9d5b11777a791277bf234c2e6a34","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.2.0.1.tgz","fileCount":53,"unpackedSize":139478,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCfDtCRA9TVsSAnZWagAAi2AP/A6TtPZIhO7UH11UKoKx\npcar2GkBO7YtuxwaLwFg85rUo5PPslndS/Y7ZQYYEtdYbX8jo4NEKJQFpx4F\nSrLdnOI5IS85vBnvvLLnuLL12vpAmwur0yzEpr9TCJl6Ur8bpmR/J/qtAIf6\nfXVQWDl5Pg0FIuCl95Tl79lBSfFmxBb/aJKA07kgX+EM7qswkVFdkssuAyND\nFGZv3/kk7T/IMe5MbBsjzNXkyywFMG5hUfq4Is/s473d+/Gs1KOLhjdQW8HG\nyAumg1e5+/VLxcfZkNEc4cE/UWgU4U+Wcl4Y9t3O8oPxXsumX7r/vlbbTADu\nNNounwewy8SYvmgVuswrjZUlH0ZS9NuE27HjSIFnOSQD2ifQZiUDPgV5O+no\nSYmNcPs5D6djoX+kFTjVz57ALp0KloSOlkCT0V/zbyL0yGQ9q/sl36UC5Bwo\ndWru8ReRpCQs5XOSDKiwmsc2ZmRJYxB/DWM06Xm1XDMy5pERi3oQCkZ9F3qD\nK87IJUdUbdrAexcsy9QF0K37nEC73W30q6RyGci4xJGvvZC/PdRMyG/q2DTP\nMAyTBOMp6ylTEx3o7AjzbjQf5ma2plWYHS9Fce1N+T5pgw0UlM8i/CDPEvas\nycTirBCnkXsfOwJ6OWcRmxJ2RFsj8+82G8G3WVE1qN5nzR3jUAv1XLo5dudx\npT8h\r\n=T9RJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqs5HX9DZ+xZX6liRQyaxBnmjbqh5wmXhaSAf4dhoxPAIhAIaVuPhAu+gaR9bF1oCc8rW9/PsmE1MNNBnn4uaHp/W4"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.2.0.1_1560932589079_0.15281366559818"},"_hasShrinkwrap":false},"1.0.10":{"name":"earth-scripts","version":"1.0.10","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"06f37983b5fd6b1d041ea2bd16a743007b9b77ca","_id":"earth-scripts@1.0.10","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-pKLqW1BqqRuR6ZErtxGyyJE0/jEFD6n3NTcQub5d7YYkCYi0WAgsQZH1hvfEvWAbM9czclPWRQObF6GqQrlqbw==","shasum":"4c8730d5f3a98d4ba64f42431e50b5cfb0d3a06e","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.10.tgz","fileCount":43,"unpackedSize":103902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCgsQCRA9TVsSAnZWagAALa8P+wa+5VntW/G86XQuBCBN\nM3V8AxFTrYDovS/9zPnthoiMSbTsIdRuu+VjCy4un3IfLlA6xcIbhrI/CU4o\nl4pGkQmHKhiQVo3nshzvQ3QmMw3Ri8vsL0x5VEdEnsxRlT6DquSavFA/Q6ZM\nyYHOPJaf/CKBlY3jbbbsiG+W3rXLFFhsfAMYjO7tG5x8blPj31B7G6+0y+FY\nbPIn/eloJ/CnVAtujATSyC0SjKR/pfcqeeyaslymrwgtNboYpAH5ehyKGlOy\n+qijbTFyRFXocWXnXHOUZPgjEEzYOLd09a7YDYdUn7GSY5is6zMGRZ3qq6F1\npy46QU3b2e5zoeNxFkLGhLaF6NgoDAAYVSIriQ4vc8PKgG6rlSQLrd8mXBni\n3JyIvwTFR95RUuF1VbN5KKVySToam+2m31UtCxWo8XqG5ny8dL5iMXtmydRj\nBlpyRb1RLm2TwlBPANm9yNBr4mMu6riXPxlmgx1f6CVCCmAxyfmZH/TODg/f\nnAAoLcSs9vHRYwR5E1Z4kUaOhhCk1qNJfGEfGkz5Kz3pmRAPzrJ8qhFGO80c\nrRQGY2dxT/KsoVv2d4bl2+OEz3mWnwvp2fT77dBbqWsRPl5f3OF4joVJnBGx\ngsCWoJBpdyXpqghDVebnJoHzUqpd3V/WqNNfKyOgS/KCzvqaT2p/DIlXc9lF\nQ8Qy\r\n=qMlH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVTLnfYFSoj1toKD8/Ym5KeOz2bwIMMN5Jy8cv7mJMOAIgWqdGHmrqF3s6Esdltch7XUsud2FHHbUS9sZKRC28B60="}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.10_1560939279534_0.2564069874484247"},"_hasShrinkwrap":false},"2.0.0-beta.2.1.0":{"name":"earth-scripts","version":"2.0.0-beta.2.1.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"peerDependencies":{"react":">=15.6.1","react-dom":">=15.6.1"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","cheerio":"^1.0.0-rc.2","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","del":"^3.0.0","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ignore-loader":"^0.1.2","ignore-styles":"^5.0.1","ip":"^1.1.5","isomorphic-unfetch":"^3.0.0","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","mkdirp-then":"^1.2.0","node-sass":"^4.5.3","nodemon":"^1.18.4","object-assign":"4.1.1","pinkie-promise":"^2.0.1","pm2":"^3.0.4","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","react-loadable":"^5.5.0","recursive-copy":"^2.0.9","sass-loader":"^6.0.6","string-to-stream":"^1.1.1","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","typescript":"^3.5.2","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-conditional-loader":"1.0.12","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.3.2","webpack-merge":"4.1.1","webpack-node-externals":"^1.7.2","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","devDependencies":{},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\nreact-ssr 使用`earth-scripts@2.x`版本\n\n### config\n\n---\n\n* polyfill.js\n* webpack.config.dev.js `优先级高于但文件配置`\n* webpack.config.prod.js  `优先级高于但文件配置`\n\n\n* alias.js `deprecated, 对应webpackConfig.resolve.alias`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n\n* staticPath `静态资源路径，对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n       dev: 'http://localhost:3100/',\n       prod: {\n           js: '//j1.58cdn.com.cn/jinrong/user_center/',\n           css: '//j1.58cdn.com.cn/jinrong/user_center/',\n           img: '//j1.58cdn.com.cn/jinrong/user_center/',\n           media: '//j1.58cdn.com.cn/jinrong/user_center/'\n       }\n   }\n   ```\n* filenames.js  `deprecated, 对应webpackConfig.output.publicPath`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n### 扩展webpack配置\n\n---\n编译client端代码\n\n在项目下建立config/webpack.client.dev.js 或者 config/webpack.client.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.client.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.client.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : \"echarts\"  // 指向全局变量,\n        jquery: \"jQuery\" // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n---\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nCLIENT_PORT=3001 // 自定义开发环境webpack-dev-server端口号\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n\n### mock server\n\n---\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n##### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n\n### ssr\n\n---\n\n\n##### config/ssr.js\n\n配置server端react入口文件。具体内容可参见[react-ssr-with-react](https://github.com/kanghongyan/react-ssr-with-koa)\n\n```\nconst path = require('path');\nmodule.exports = {\n    appEntry: {\n        \"page1\": path.resolve('src/pages/page1/indexSSR.js'),\n        \"page2\": path.resolve('src/pages/page2/indexSSR.js')\n    },\n};\n```\n\n\n##### CLI\n\n* development\n\n  `earth-scripts start` 启动client端\n  \n       执行如下步骤：\n           * 打包编译client端代码、启动webpackDevServer(CLIENT_PORT)、启动mockserver\n           * 生成asset-manifest.json react-loadable.json\n\n  `earth-scripts ssr-start --entry=pathToEntry.js` 启动server端\n  \n      执行如下步骤：\n         * 清空build/server下原有内容\n         * webpack(watch) 打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n         * nodemon执行pathToEntry.js文件。当build/server下文件有改动，则重启\n  \n\n* production\n\n  `earth-scripts ssr-deploy --entry=pathToEntry.js --env=production`\n  \n      执行如下步骤：\n           * 清空build/server下原有内容\n           * webpack打包编译config/ssr.js里配置的appEntry文件。生成到build/server下\n           * pm2执行pathToEntry.js文件。\n  \n\n*如果不加entry参数，则不会启动server，需要自己手动启动*\n  \n  `earth-scripts ssr-start && node pathToEntry.js`\n\n\n###### build目录结构\n\n\n```\nbuild/\n  - server/              // react build for server\n  - static/              // react build for client\n  - asset-manifest.json  // static files map for server\n  - react-loadable.json  // loadable files map for server\n\n\n```\n\n\n\n---\n\n###### (废弃)cdnPath.js废弃\n\n###### (废弃)dev环境下browserRouter优化\n\n.env.development配置BROWSER_ROUTER=true // 是否使用BrowserRouter\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n.env.development添加配置：\n\n```\nBROWSER_ROUTER=true\n```\n","readmeFilename":"README.md","gitHead":"b98bb42eb646d141a4321e4de7c1ad192076acc7","_id":"earth-scripts@2.0.0-beta.2.1.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-xu/n7AkaaDMI41cyFqLAakuHPPgDxvX9BlY2a+FDXmzAIVxuVexwxzildBttXihl9q3VVOmf/EqpdM2GgYAP4w==","shasum":"9293a0d3b51264cb0731b578d1e01e6d89c37776","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-2.0.0-beta.2.1.0.tgz","fileCount":53,"unpackedSize":139502,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCi8QCRA9TVsSAnZWagAAgZUQAICjXMmCiWHgW7soN8kz\nF3H/jelYpgqE3neisLbzbqymLUHkKLT6LJSfxiVq59HM6aaJzqxk06XtqEGh\nIUu7x4Mlz0nb8QfznBpxdU55kMxin+Uiz9rkItS3huq346rLDRDMoUyuiUT0\ni3MvaRaSfstLl4lLIhV4Haz3FSeddMxI0laVoHr7Uvz1nL+hZXvwEAMiG3Sd\nasRfOnv9FcQoO4ZJPPdNwzB7Bt9XJ+lLSvKXHj/kzOCFOXH7YYlRvNs7sdcw\neKi6aa5cZMGzWp9MDTBNa13tLyDcFFDZ425onWumA8gAd1YXIrpu4+tYNx+h\nd3ipZWaYIzmYyBdUfnqwPGm5VU7+Q5LBj+nLalsRzsQJIjWyGqji1jK+QdpJ\nPCteVoRGkqMk3108ADvf8DBWKYVOaQfe1gcD4ozXvZlAQiTI2jyPW5ripjV6\nHzS0potT3+5SAVaJhBswb7dE7tZ152cRwFr9vNyD9bF+4LnOhWYEjNAa5NKl\ngi4JWIN+d+swpnnoY5LFfnLEmnMD6Lm8XjMYNFs94QtPMTOLo7Ld6JmhdDpk\nVezTkBC8XGa9FHer0u68P1mNhCz6poiqBkDrXP5Ot/zwsxqNM4HXSYF61d59\nWRmBAtS2e0R9R/WFSLZTjjueTlkxdvvhixksmcMU711djM4RZjGwhvlf2Jpv\nnayn\r\n=Wat1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKb28T4Ljl7W3L7c6z5cZH2nBEMl9g5tWgj3/Jj35z2wIhAMUbGAqXYrDxmVCm5IuoMYXNaZSOi0UfVl3mv4lEo1PJ"}]},"maintainers":[{"name":"davidfeng","email":"946401639@qq.com"},{"name":"khy","email":"khongyan@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_2.0.0-beta.2.1.0_1560948496071_0.03185479685520032"},"_hasShrinkwrap":false},"3.0.0-alpha.1":{"name":"earth-scripts","version":"3.0.0-alpha.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@typescript-eslint/eslint-plugin":"2.1.0","@typescript-eslint/parser":"2.1.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.1","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","eslint":"6.3.0","eslint-config-react-app":"5.0.1","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"^2.0.15","ip":"1.1.5","jest":"24.8.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"^2.1.3","url-loader":"2.0.0","webpack":"4.31.0","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本 (webpack3、babel6、eslint5)\n\nreact ssr项目  使用`earth-scripts-ssr@0.x`版本\n\n`earth-scripts@3.x` 已升级至webpack4、babel7、eslint6\n项目内如有webpack3插件或者eslint5相关配置，需要注意升级\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n","readmeFilename":"README.md","gitHead":"8a42230d82dcdba9da059284ab213febd8f9699d","_id":"earth-scripts@3.0.0-alpha.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-5MlPY9TtesZXm4zwmp6DG5vcfj18MMODa/myjU68Y1FPM2p7+bK9BTt3Ch3bpJuuKo6qQTGYsuNa1rRBed3beg==","shasum":"88c4e19bbd007944d18e38e22544dbb34df59597","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.0-alpha.1.tgz","fileCount":47,"unpackedSize":110223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcGw7CRA9TVsSAnZWagAAZp8P/0isZqSxAZOIXzGUVl4o\nZt+QOhbUG2ITFAxu0CJ3Qa3OobCSHhaDfN51FuippLgMXStV5CU5b0IPE0gr\n2tbKiyb2dY/aIUFB1MgEU8R/4BQkyygpKuahxHmw1dJjwhqQtmbDootkJ4bi\nXhzxqOnV/ezgi8YL8HRwV3+Y5ucB/r1NkIRXp6uUbU1jsra2a/pUtWi9a7p1\ncW+0Q4Wd8gy1ER/7rx+g7V+fAq27GzJBBKd24HKrCPofL35wjPdZQOBiJsX4\n7LtymWU7AEtuPMMfst4rb3NGXHgo8F+cojBn3zkJhDYPFkvnCWNiB9/se5qX\nhN0Dnl0JNkzlMBgfaqnckldXffV+xAma/MV6eKF5Enz0w1wnnbcnh67/+NG9\nCTt/3DgXqizzGDMjs8oiPsWGJgWpsJrC75h12mD+OfSgwhR/q66aqjpWgqCw\nQLT3dkHLtI1+mGXqS0OkXlNs38QcHiJ6gn6NAoZqXu/o3zPDObH4XvkGS1Tn\nfSOxvcXirXna1maz+Ze2R9+Vl6Lxl4ddkb/kXba4hDf/If3QumLdoz7BNCTF\nYDcpvEaW/EWPLNMZS+NQ8fY0fC5q/RAncQ3auESwA6dsn0humRlqYyXPpnsE\nlOQojJTmFJ8WtTTfEYi94BVHC4aVg3ou1VbDY4lmBiudVLbkzuC8nMB9wcPc\n0JTY\r\n=N+He\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCO6ANowNkcHNxjEhnR1CyexIaH7zie/ZE5pZsu6GYqmAIhANqcRrogGppAa3tDxyVJezglt7+KekofKkkDN7l9/ZYP"}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.0-alpha.1_1567648826538_0.8816549578687616"},"_hasShrinkwrap":false},"3.0.0-alpha.2":{"name":"earth-scripts","version":"3.0.0-alpha.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@typescript-eslint/eslint-plugin":"2.1.0","@typescript-eslint/parser":"2.1.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.1","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","eslint":"6.3.0","eslint-config-react-app":"5.0.1","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本 (webpack3、babel6、eslint5)\n\nreact ssr项目  使用`earth-scripts-ssr@0.x`版本\n\n`earth-scripts@3.x` 已升级至webpack4、babel7、eslint6\n项目内如有webpack3插件或者eslint5相关配置，需要注意升级\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n","readmeFilename":"README.md","gitHead":"1f9af18db056c3c944b7e6493e51c7d85dfb4a09","_id":"earth-scripts@3.0.0-alpha.2","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-Gep9YJTYam4bm6WvU+DeTX/z0Xra0NT9rm3IJ65q7f4QRx7FDC0TTkZnv41zit/VdO4eAsYEj2T4tDv6T1lcNg==","shasum":"92e95ea9cab121c28c2fee8a19ba9964d4fec097","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.0-alpha.2.tgz","fileCount":48,"unpackedSize":111953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcLa9CRA9TVsSAnZWagAAZBcP/2HByvayibHkvVy2VomA\nFYHzu024Ky68EH9Wc/XJv8NG06X5A8oBzyiwbvWic8mvJMc1e+A3jvwYmB7v\nY8iHGKhYJW7E0/Ckk2cZUzW660BO/Cz2BKNX5EfAmi6lTxgmiCJwnUo1EACG\nWr59TH7SSdZHhvzYwBFgdmSDsBdje6o33zGkMFXuhGsLZ4ZbGVAHRDc8wNH9\ngtNCCX7nn9CmqsbkM5mTu8s2LLVTcVAQgqKQEyC3L5MkbumUIlgJ7Ff8WWkT\nuUGu5bL0BO7iqjyYpiBqFu/1fsNi25cyR7w8ypYTw7KJC+TLuHRXdLO2hvq9\nbWygOc0UZxg+y7tTDTDqTdrdEiDXc3gl7yc7jkn255gUKByVIXmmbjQv1leh\nv6EpA+bOEgcCfPFfcOlxihcsVcTYCzcrKYzcFJ9YTn6IIVUgxZPpBgGLP/8j\nfRDaL/+wmRj9kbxnUVnH171ucPREklTat0kLH6q8bUJQDRfxnBbDhq1yFT/N\n5ixyg62e66Sf1wTrFG/0JCtyDK3lvRL5l1fR3ZVQrzV+Ey0DdQ9DuqCvOA9G\nSo65Uwr15UqDnV6qiFO+obEZo4obysZhfvyCAtsdKq3Tt2A/oKaIfy4LnLB4\n5tHveY6a0oGq9eJPSqTrkEBRRrKZTHINRKo0aphfJK878/CbSKEpKY3BHceN\nTuyN\r\n=BEoG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICjjFR39ChjaSqHaogy/dlYFQEdlhn8CaZKhzCgRuMmNAiEA2/MJwRbekcQ9+3oM5c2qA+XBnI/xtZMRgGhA43RQIYk="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.0-alpha.2_1567667900901_0.7198473074095961"},"_hasShrinkwrap":false},"3.0.0-alpha.3":{"name":"earth-scripts","version":"3.0.0-alpha.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@typescript-eslint/eslint-plugin":"2.1.0","@typescript-eslint/parser":"2.1.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.1","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","eslint":"6.3.0","eslint-config-react-app":"5.0.1","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本 (webpack3、babel6、eslint5)\n\nreact ssr项目  使用`earth-scripts-ssr@0.x`版本\n\n**重要更新**：\n\n**`earth-scripts@3.x` 已升级至webpack4、babel7、eslint6\n项目内如有webpack3插件或者eslint5相关配置，需要注意升级**\n\n**原使用earth-scripts@1.x的项目升级至3.x版本时需要关注doc下的升级指南**\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...} // 同上\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n","readmeFilename":"README.md","gitHead":"f68d64ebb5feab449d0d998582b4baa673152786","_id":"earth-scripts@3.0.0-alpha.3","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-eG0o6icKWHnYRHCl8GXTvngnPglhC/2j8vlCa9xXzp6lTgkfnlGV+D3Q2yDMttBcroWv89iUbWxputJ+unffnA==","shasum":"9925203651acc4862cb67cf250bf6c59d24143d8","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.0-alpha.3.tgz","fileCount":49,"unpackedSize":113422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcPlvCRA9TVsSAnZWagAABbMQAKSqioN7LXRXyHF1h8ZO\nunUcbqXDOkGebKBpHfNdFp4CCADn3za43A0ZxTUTvRVu+rBLjiL7R6f3poPK\nEB4uqIiWMVxNSgaXEsWuZVyfVaYezk+oWm39ydjiDMW6n3TZ/pOb9wgfH/C/\n5AGVwYW3A028/tUk6y4p6HKvAolSgc1pdBvpti4wNx7ALZYAKl19ZBpJyU1G\nI6f1jDCjTvb4/p4NXvMKEK/tfhA9lLf09Mik2jXqDFLO98/yl8LAn1U/twTj\n+opilDZOWH+7oRk/cx/oSiGbsZI/lWKr2l8nqERdVn15KAzawD0gT5XKPhUT\nwy9OKK45uXSA+5vnmybSsZUVrVt09GSfLYxV9hDKAKfqewpvL4Yfk3kdnBK3\nXYMJOGZaO1HKH7w6qeCftdlx8y7W87oQB+gVWIkHeDqHRtuPResSsGCF0Rt1\nuK/An4phho3vAENdndTLA+mNghK9U+Wwmp3706V2QZUchIlKb0jH9gZzJ7ny\nUr500fL4T+qYO37GHKjCgefR0PB82sR7tELWcEelAeYpQMU5PEoTaR1Arowa\n9f/k/Xewk6B8koBAVK0P5D4zNPg/fGKzmt7a7G7Btb20VItkro/47ROFfOFi\nnnhJ/SCtG1sMraRanMvUDVvPvoqeH9C5HdGAECNgzCaG4EJY480kOSCcKBuq\nkCjF\r\n=Q/VW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG3liAspW4hsQUJ20c8T+JAz00dOXNAKdpswjyg+fHvVAiEAts1XXJuVdcg3XfhZfxyvl9dmxtkodD5I13trbnLsa9E="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.0-alpha.3_1567684975033_0.8959962958367702"},"_hasShrinkwrap":false},"3.0.0-alpha.4":{"name":"earth-scripts","version":"3.0.0-alpha.4","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@typescript-eslint/eslint-plugin":"2.1.0","@typescript-eslint/parser":"2.1.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.1","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","eslint":"6.3.0","eslint-config-react-app":"5.0.1","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本 (webpack3、babel6、eslint5)\n\nreact ssr项目  使用`earth-scripts-ssr@0.x`版本\n\n**重要更新**：\n\n**`earth-scripts@3.x` 已升级至webpack4、babel7、eslint6\n项目内如有webpack3插件或者eslint5相关配置，需要注意升级**\n\n**原使用earth-scripts@1.x的项目升级至3.x版本时需要关注doc下的升级指南**\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持entry.vendor, output, plugins，其他的字段都会被忽略\n    entry: {\n        vendor: ['other modules']\n    },\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...} // 同上\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n","readmeFilename":"README.md","gitHead":"4e97f9b98b717fa87aa6cc7d22371510e9987e9a","_id":"earth-scripts@3.0.0-alpha.4","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-KHs1glOylDHmaXRE/TOBtjbxQw3gRKRC9MtWOOMrASsZUla+utqNbD4nyjNblRJGRX6ufzUqmREnRkhcOYhfgQ==","shasum":"74672e33f58784b67a2938053d837dc0bc7f6a08","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.0-alpha.4.tgz","fileCount":49,"unpackedSize":114407,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcjA3CRA9TVsSAnZWagAAOGgP/i12XR8o1xUA8DXHAcUJ\nisSwWt/59p7cPHoKxdJKc0k55CcSwYAl35CHq98xqhg5Hl2DH/TDAnzb9cOD\n3NrhffAiX8osbxGdgooSzG8uw8qE9IR45Lw9vBgB3QTJDeBQl83I+vMHX6qk\nwHrnP2wWdG5W1PkL2e/QFNlX7sSvsJ+wCd6nMGf/NQ33bGqbsv7B5vk9/nz7\nV/gjSuQ6qubeiCFnegZRM/QcLMd81dzOQeUrhtu79bHe6pt7R1TmJ0kfTk+f\nGRZEjlcgjffFZh7I0J24k2rLULwXl27fdLJKZiIyvEVdNKVPq9YB9ksMPHt1\nEnJaTcCxGLte98dJgqkG1/NhKNsbf4L/K8/g+JBu/jtZu75OrRayxsKcVBtQ\n2309N7TIHumE8BmSteBLv59e3O/lvP9aK28dsgYYRB/Kn0e68ySm1QgxcMgr\n/n1nH+mYJOi3pxF0xDKpz03AqtGiZ13KgkwMmgXr3HivW3ng3akvtri5xyRo\n6IJVDgYAUxJ3Af1hHojkpTZW+MKT61260UReExA3E3Z0aWAZ1lz/jguzccUh\nhIeZIvCYno/gexORvqmdTeODvv16aJneXNd9Du1VfT2VVdrCEPLwiunCHp7X\nEsFaaSEpP0+HoDus9NEjfzVb4IJZC7DaM96nitH4inFiW99S1qLagmJg5O6f\njIxf\r\n=OiOu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF+d8qb3mxJfqbixovW9RZs8y8AlA9xbrrS5fT/1WutDAiEAnu0JN8cQxgX+iHlzctAsVIiEq8q418W6cq+AyUiW+Qg="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.0-alpha.4_1567764535070_0.5340485559069232"},"_hasShrinkwrap":false},"3.0.0":{"name":"earth-scripts","version":"3.0.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@typescript-eslint/eslint-plugin":"2.1.0","@typescript-eslint/parser":"2.1.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.1","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","eslint":"6.3.0","eslint-config-react-app":"5.0.1","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"14080c0c9152595281fc9b095b42d7d06e70a274","_id":"earth-scripts@3.0.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-mbkPI+0kYpJ6RsWW3FZnRNnmmr28YO8t/0/ShEZlPR6+vTymvnhb9Zvk1e+DQ/XHjWxQk227S600e9q/Pi6klQ==","shasum":"efe8cee63a89d603e2e810fa350801a0db91be77","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.0.tgz","fileCount":49,"unpackedSize":114434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcjbcCRA9TVsSAnZWagAAQ8IP/3HwwuhcxzXVDkwREZyc\nBV4HGPTc6pUihPSV/A3QLKwlWlZ8igzrExdL4S/mo7SrAA1av9Nw5RGRZcJ6\nxaxT0XzUAWBGEFIvUjgCDMpKDFLOIiLdkUndTzJvzJk8+A71XH18lHxI7X1M\nHhc+aqH1fLXtOnkyV0uJx4ahhQCH3VTerYJr/2phsGcTpR9isJr25nQusVen\nLINz5heRQi7754m7IJwm0n9SosT80jiI+UGxt1k4iuU7bA3jxbDsvFGe4UnY\nVA/o3vtuxRWGfRlfaOkr+AiRjoncf8fFTHnwEaZuTjjUjOYf3Fkew5NXz2jp\nE2w5Li5rm3xIxvXAlWc4DBMDsDSeJYRHWp5uFeopglYrxX1f3wdhNsd5reu4\nxyz+i7bbwlFfke7SCGSsoo+6G8pcvb8TFZtFi22TIUecui5oL5ebQJTC8VUd\n28D0ohLha/8DvcKn23XqwBLY1E/d4FXuFIU+1j0ZDyjUWV8Rzs0l7yX8X3JA\nt8r96driVskcMBBDWwLi85sqdTYRHXjMxRUhPEr2jWT7VMeeP5ZzKvUrYKl9\nvfbDcRBWqcN+lLaR9Jrpyqf66TUXHqqBb08qNbQbQnuAdmUi7qeMvmOB7jMq\niCgZAIrt+20bGqja4cesKHY36Az+TvOnEf+jmBPEGDazIuvYHysnOlqVn9aX\nTWfl\r\n=xGVM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFE6I2Y4l4De3gztKfrrKqyfPqOYpZ68n++e9iB9PZTdAiEAtyG49A+BbIgkTdVk/WuiTpUD0c56x6aUWXlgwNF35ms="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.0_1567766235462_0.7360378446658629"},"_hasShrinkwrap":false},"3.0.1":{"name":"earth-scripts","version":"3.0.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@typescript-eslint/eslint-plugin":"2.1.0","@typescript-eslint/parser":"2.1.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","eslint":"6.3.0","eslint-config-react-app":"5.0.1","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"9b69898d835b0bbe3aa56d1f660b5ac4488de43d","_id":"earth-scripts@3.0.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-kSqzY68V8tDLBrzHEKD1xRtgk4IQdywnYST+4hqpGsFsbjWpsiD+IN8CuZTsq6SeyEsQOE4xsQVvC0bMeYdUbQ==","shasum":"ce984b3fb6aa3609e44194307159610bd3d729f0","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.1.tgz","fileCount":50,"unpackedSize":115873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd1IXCRA9TVsSAnZWagAAOLwP/iPR7RASXOvtaEhXgxfh\nBP/pnLuotaWDVuzn24JC71P+sL9bEF7XPNLU4dCCSqqVVUxDzWGTDTsjZIeK\nH/w9a/EsgMR37t4bM/1eN9rgbWX+cQOm/aFNS6ikudJNNrRGfdzPibfTaUhb\nKm6w21iGTZ3u19Zahof3ODsQXlPSfvC/2A2ivmZd5inqTxO1mmqMR3lrih0F\nxVKQni/wnIOQia84l3zQO9C9WUe3iV2UMqjqGF/5dUrybnV2ACyrjPUJ925v\nSUghC2igiGNnwRh6bzwRAD2GhBEjbtc4ADOcLYkWmCpc+ttpeW8YxKDYeTah\n/F/XSQ7CY/geAaIEJj/SB1D0d9sQPniMtXLbwHMyIG+p86qKhRnVuoHzptV2\n1F6iav51YViwrdiD9GXNtw52gCfJEKXxIPmL1IDXwUfBrAwKTCpf8mdYRpo7\nVSv69uLZvP8YhDRgA3Ydwn7cWORUyT8t56E5k2oqwxECbu3fycHN4FNjnr4x\nEe2w11gO0KqcWHynDzAuAPckO3jvYWrZ3jnRGX4Aga9/GaQPi7h2dwJtG/YS\nrzfc/9zxETIc0M934SXtNlfOxWt89+QiQWpc6Ihqct7Z1IsPmwlz6hnG98tH\nl4LprEsBHoYBwyOE0Piy99sLF8pSgrt8VBXwz98GlyQVq3XlfGPO7pfKpGqM\nphc0\r\n=d0FU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAv+3aydXxUC+bX9w+ZLC+U1zarYYHENj3t3e466XMwGAiEAx/FOBropMhFbnGzp63CaxsJCQX0pjNvE8tqqZnDQ0Uk="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.1_1568100883816_0.1868511676291058"},"_hasShrinkwrap":false},"3.0.2-beta":{"name":"earth-scripts","version":"3.0.2-beta","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"2.1.0","@typescript-eslint/parser":"2.1.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"6.3.0","eslint-config-react-app":"5.0.1","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本 (webpack3、babel6、eslint5)\n\nreact ssr项目  使用`earth-scripts-ssr@0.x`版本\n\n**重要更新**：\n\n**`earth-scripts@3.x` 已升级至webpack4、babel7、eslint6**\n\n**项目内如有webpack3插件或者eslint5相关配置，需要注意升级**\n\n**原使用earth-scripts@1.x的项目升级至3.x版本时需要关注doc下的3.x升级指南**\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持entry.vendor, output, plugins，其他的字段都会被忽略\n    entry: {\n        vendor: ['other modules']\n    },\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...} // 同上\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n\n### 单元测试\n\n * 在src目录下创建__test__ 文件夹，在该文件下编写测试用例, 测试用例文件名为 .*.test.js（实际上在src目录下任何地方都可以编写）。\n \n * 如若修改或添加jest配置, 可以在项目跟目录下config 目录下可以配置jest.config.js文件，内容如下：\n\n    ```javascript\n     module.exports = defaultConfig => {\n                console.log('defaultConfig', defaultConfig);\n                return defaultConfig;\n           }\n    ```\n    \n    defaultConfig可以查看所有的默认配置，这里可以更改所有的jest配置。  \n    jest 配置文档 https://jestjs.io/docs/en/configuration。\n    \n * 项目文件引入会使用webpack中的alias功能，在jest配置文件中也会默认使用config/alias.js中的文件映射，具体配置可以查看defaultConfig.moduleNameMapper。\n\n * 支持ts tsx。\n","readmeFilename":"README.md","gitHead":"347a4fff4674fb07c08b1ddf4b98be970120f2c1","_id":"earth-scripts@3.0.2-beta","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-24z5q1yRquM2vT+9IxmfocfGs57ZHya7MgSWSq+MiPeUOH2MpAM2vE4+WfWGNkQukf481QBARBKL8nvatZjP7Q==","shasum":"9d42afd8ec956d84639d5b88d925fa6e5951cd4e","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.2-beta.tgz","fileCount":55,"unpackedSize":121795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgzZHCRA9TVsSAnZWagAA56IQAKMRqCJR4g47aG4RfLki\nZ09pz25ZS80R6yaBDQZVR4jewrn79AuaLLHG7WXGAxE1XwDplNPNax6Mu20N\nW+gl7rUHrR1LOveYF7nCxXiV0FM2yaGbAnLyq2biJHPUD9nG0TX1fJ4GTTK2\n5DLveMcpNtQPjW0OM7OFWf/TIoZ94ar0GYfphrcs49lyWYPtRf4oKEme6FdC\nr+qZ/sKe4gU1MUG1JxFZV45o0OOXLY/ryz3jHeqx3BOx68K4ieRz4wQnIToh\nFpdzai5IyY6dLkgG2juI46ahF626uGzaG9xIavmepn7U1un1MVQHiOQSaT1+\njWEikEZbFDKvhq22DAGz9SGQl6fiN5p85CYu+wtcdOae0cXrh9K68C3r/OtJ\n+zU4yb2mRXHem0I4mpqwzt6IZqYLwotR5CGwTNbQtP42hCCLrE2wNXpjq675\nSvMLkWvb4EPfymlhOac8ehPcdotIIzsZPOEiMi3wuugqPW/z+oesuefR2CHr\nRA0JXWCKdCpMn5YB45Zfcq/FGGcXUd5gfIPq5lKTkDeE50mXYe8Esz8ryWOj\nEW/8qqZteboq8XORLu+01A7iK0Nn/+Bq080mQVL7SUwQ2jeUYeJhTQDhDdou\nSwGnQW7qvuMzt3pUAx8jfSSEIMLulnCggnL9R2bJrrcK86BodfotguzahGQU\nsq1z\r\n=EUSR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDkQhUOHT+KEKsZxrHNZJtJoOA7cLhrWwGLz+KTXU69KAiEAoyv0xMsmlYzXpNg3ZE824viZrObZVypW8RyfdKGx6Do="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.2-beta_1568880198819_0.5536206478623649"},"_hasShrinkwrap":false},"3.0.2":{"name":"earth-scripts","version":"3.0.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"2.1.0","@typescript-eslint/parser":"2.1.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"6.3.0","eslint-config-react-app":"5.0.1","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"b385d40eec231ba6c8b096b17561e823c2b73597","_id":"earth-scripts@3.0.2","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-sLEOM2aYsyE8RHR16U2vmRRu1MdYocZ8HlRk3Jdmu7Z3MaaXn5dv6CygmndJGf4xIWMcGEP8W6w2muWlpk2x0w==","shasum":"0614ff8626e13da528300aaf7e1e8771470eb43b","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.2.tgz","fileCount":55,"unpackedSize":121934,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg1UiCRA9TVsSAnZWagAA2VgP/2LnEBVlDXN0beFdgKuv\nctL2atQALeSqVRnnimiGyJ+Xf4hS8ZFpaGYZBUQgVvxK9XfojVBJjruOGOf6\nwCILPcoecZjo07LUkoqEdJi1q/nYqBQgZJzDDoRZ6xYeoWbaSpqBmCSMI1BG\nm+bJT0KsTCMGzEQ3GoAc67I6ZVS6QKrT26ZKW4XRkI2DR6aeiu+tF9Xa8/jq\nyYQaty07/LqpAAopkq4jbrRPzkbZm69qx+IWQ1VRNU6T2oj9GElYsGIb9ZLC\nKnlQZYxtKivGiF2NOvD/KJUe7Sjqv6IViTZkXnAFD5dmLYIljpZxMxX/Gl+d\no3V/M1QFh9Zd+LCkfiSuMFYvtkQtWz3OijclTM9WOQvU1l2umYgY7X9Lfx+q\nVIOmj8GAWOa+IzAlhKbV1a5FIDz17ImSmCUlVEngdqpIvmuFaLnxHSmgI/3Q\nyBoGUfSzUPfqa7p6RWBltZ3DJLZbljKXWsI4yvSXf54DilPa76DCeztMelKj\nE5aqDYQXrWHCHVwSBGTs5zVae3hfVUlWLTdfCMHUkynCAImJ58apj/7KkZt9\nz3DO4t9gyyNbdM1j6x54gHBOwUwpQwYsLIxmGg87mZfjhT02NrZQyq6GS0In\nmtQgC3f0Jxozj0LsBV6T7GYutUgZChxfJ3L0nQ9u7hO+lvgTQMMFcMGedU2t\nhYV9\r\n=EdUs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCm/lLmXXZs9IF7shhK8xt9dqQC+XZR0/j8ctE4woWhcQIhAPXugmWKcmRo56W6YxhpAHBpON152j6MFWy5x0cnQ42b"}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.2_1568888098015_0.39147307624768857"},"_hasShrinkwrap":false},"3.0.3":{"name":"earth-scripts","version":"3.0.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"2.1.0","@typescript-eslint/parser":"2.1.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"6.3.0","eslint-config-react-app":"5.0.1","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"fd809510b2d2e90722117a2de21df800a5a5d339","_id":"earth-scripts@3.0.3","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-OmPkCx3F07cyAoXZN4X+Ozc0Sj0qNsJFjWyX+gt38clLA4JDNpH0lJI8esL5URSnZtmIfyREQ/PrZE1oxX9t7w==","shasum":"71cdbaaf29783030d49b67da34897d4b6d3abaa7","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.3.tgz","fileCount":55,"unpackedSize":121849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiy1LCRA9TVsSAnZWagAA5hIP+gPjtSo8vM5cXUQ05wQ7\nmRMxI2vkdjH6X38XpzvKovJ5hsOZWjS8WP1FzkVSusx1nc+vRowbQAPUckZd\nC9uw4OR+6aQAnoQjzKy/V8NYTCQSsVdcSIi8EcHihAAthkU7IftyVX5fOdJb\nWRSTUfXhnjXJchpvvErzb0Ijzdob94HCqeefbY2IL7LyVz9lSr1yeNRxA5HW\n8MCKmxcojsIXLgERmpktMX1Ne+A4A6l7TDZzyGvPlnqdPqFclrjZg/aXwsG0\nfgZXJTnCuU4XRByz2wIU9MPySKOfhurl3evpMDVga4lcoBUleSnbxprwXhLs\n87qAnSMdbRBAKjbfaaFtiCrF2Hhe1fB34z2E1Eduh6iTSGjYnLP9k8rl0t13\noP2qFygj8ls6L96Y4baQyc3fyLzVcM+oOnOjTHYus4INx+aIObyi3IjS0ad9\nUqNzdPJ6GUt6MHzubX6er812egGmmcMa/+KdvJIOG+Idqiu79IXEkv0H2gRj\nuhxVSf2O+hysgduFx0sa3mV6ySuec6HEMhXWeSxuA5g5XiqKSOhnifbPJoz1\nU1P/0CDf7QzktvlBNhL+fe/wsi8E/aFMa6ITCJtVphkgkY+wL4wgca4KoEPt\nGUVOSOYm7AhEgkKudLUEeolLo5t2DjgJZbFPxv8cQ6mlhZBG3PjUkJXXllLP\nSGm4\r\n=tqcB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDC5r955f5rGihCSxMBzSFI6NrZnCPpprbHGXDj89h0/QIgKAv8YyDnAHLx6ZTui4hkwYJJ3cPOVIDiIzLzrwVAIH0="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.3_1569402179289_0.7210051300561191"},"_hasShrinkwrap":false},"3.0.5":{"name":"earth-scripts","version":"3.0.5","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"6.3.0","eslint-config-react-app":"5.0.2","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"9601da4c0b977881c423ed7267180553a678f27a","_id":"earth-scripts@3.0.5","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-SQZjKIxPImXKof3IGAjJipyR7c2zRnVZyFWQ5+Lh7RuZY79EX4XcYHv2MSLMsGDFfFlmV+SLvtv+3ppkgBVKwQ==","shasum":"27bbff201607037f4073f359de944c0fbd59f48e","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.5.tgz","fileCount":55,"unpackedSize":121851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdpW4mCRA9TVsSAnZWagAAdMMP+wcp+SbU/40UBDbfFI1c\nDRzBn0WfOSSrkwE79BzZqVfZXaMo/OdvJe6aV7JMl9O808enyvlDlE/pFJeA\na9SG26KRg6OVcZdVoS9YY/FWYLFyBFz+ogwe6hJ9RLCIp5BKvpqzufUGJhtF\nwv1vrG/bh3po2cq+lBR+midNQNBwhhZ0cn9IcamHr8xGP4yN0qYhW80QndNg\noIbvxb6aaWhPD/4GYhW+Ih7imRUtpvwjTnnBQ2+KaN12XWq0vVzG9gY7MjJl\nMT3grLGm7LJHmpP3yiiOMuRhriymQmdJLE5ZVYRMTCU2HPsNCsl+9/bnZDTQ\ngUf9EIIX5aTcyPeMLzTBBB3G2fg1WWJczDp+XxDEd3VW+FknlzWkDBkzkgnO\ni5uejgCViTC7ki1q0ioFG+4xs+qleC5+18vmYeqGn0HLqiAQhOSmX5oBXYqx\nFW5HsK0+7oJbh7o2nuL/ZfwNo/RVrbpxQPKfhQJGvLG8NnCE6VfgD3yzsgqz\nttatMgjVqMA0e76l3BpmaLCRDiWIKXo0tZOWbOtm2kXtRlViwUktTANQ8adJ\n+3C0dymsYjwpISP/JNHojPzXvZQBaJ8jim9NgKyhx9XV1U4/KtOPCq189zLl\nD1Ev45+7Tpybh/u56vM3slCiI7Z2T0VR/i57bHwcuGf5a3CFLCW+BW5No6Hx\nDLN1\r\n=6u77\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDAr1Ne6BUYKjEzlBJCLRQ130D5AAhku5QTQd/S29hoaAiEAv4nOpTHDkb+Cxqf0VdE2ldYCansdAUuIrzgU0pXzj5s="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.5_1571122725952_0.033200429703929224"},"_hasShrinkwrap":false},"3.0.6":{"name":"earth-scripts","version":"3.0.6","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"6.3.0","eslint-config-react-app":"5.0.2","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"76403561f7c4404c163d17ffb98c35c70aec2662","_id":"earth-scripts@3.0.6","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-ETW74f7trir5hamS8nI63WBaJ7Lj/MXwnIJFEcZYCM2ym8D3TlKXMRNXfD6Zt7Z6Q1wVkrIY48z+ihHPUQm1aQ==","shasum":"5794b65b65827b820a33c393b3ae61d6c992efd4","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.6.tgz","fileCount":55,"unpackedSize":122002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqD3sCRA9TVsSAnZWagAA09UP/jSk1zPsnKQdGBN+YWv/\nWSG43ay2FTx7GMSwhKO9YTGuMzU5soWWlrt6iwhueWNyVcO+FnYNeDewN7la\nII8CxLoFIO0P8BQr0JNMKImhI97keZD2pSulxZY/wwzmf3JQTyZ2z9pT+imo\nlKByQwiQxEolaQiw/Mp8t6hDLFGtDeMaelt7ErtR8lCua3Ksauy91Gd9Eoud\nnoiirXC/ofv+aEcaGvYh8TVsgQbr2Jy0XuQaSNUa6dCBqVtC/xzWZv9Kiqin\nHwmOp1ppDJI63ITolzlhqcAo/5jmDHOAsLZaVekxg2MSBPLDW5W4lnLAmZs3\n11bQRP53Ilj44vM1vUZ5fTu4c29Yv2UYGEUrrG0msOttzXhEc312H1P5vOP3\nWY/kPhBFrgGKVNL6H4XhB3wunElAKdKsHBIfi15HVBRq3Wz0lI0AV5Qd/0pM\n3+KmL0fRhLjXA45QfkP05bzd8DjSujKaR6KT0TakJHA6MwDLSPCcCHNOKvOp\ntw4C+IeUiNsouTfEi7vnI6jW+WlcDQQG7SJjs+wtiePN0837y/rFmxarUvhB\nYUdSdnNgOCeJDfKE8oKBvw5Unib8SI3G6SDbKVbiZdxtvakewBhw/AE6c7p/\nPiHlGiKaBtxYtjMSx6SNa4EJDWGETjeeYTz+L/csMPKwcZzl5D0ZJHi2iZSY\nwI+m\r\n=EPmw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbxF4ornVK5b1XwvxCQJyX7n+0NorfPdvbcyfLxdQZzAiEA1jQCc45IjIqw/rvVJdbI+7v9M2dEU3B0t7s5Rh5gPxU="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.6_1571306987729_0.41375213355171936"},"_hasShrinkwrap":false},"3.0.8":{"name":"earth-scripts","version":"3.0.8","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"6.3.0","eslint-config-react-app":"5.0.2","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.11","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"2ada7985a888008573e99617248f52fc70659a6c","_id":"earth-scripts@3.0.8","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-jGsibmQe5uDrb10NERcypLqg1ebzeCxCuytK6BNkiskcF8WKEQXkZx7uJ8yUgUvT2cbV8QS+2XBXZa4kItXbrA==","shasum":"5e8f68295e6f4b23a43559ab1a5b5b73ce6a3f21","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.8.tgz","fileCount":55,"unpackedSize":122020,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt/70CRA9TVsSAnZWagAAS/oP/3NzVkbVdu5JqmLkYn10\nIPzUnBkTOWsaaSYYAXMSiDpHFlRxTCfUzQeteoi8fQ4byO/YvVrKwYunfhZ8\nhDmVooYryaBpp8jVTuaLoLGpPDFnU7n44Ywnjgt08/u3kml6SSanlxdQMi/z\ndPPIWo6HZ0E00Z+vrNn/sa+hLBBXDJbRC8CKhMNUXp+tOK/981g5GFRzR7mj\n5biPuspyIOe+HACUkr+sf6+0NPAGjLcYfb6/vJ9O4MvrUT56TYeAPZroZ4kr\nHq/MB2AQJ3i/WNpn8SSrGYZHnYn/VveD7LxrQygYCYMs50tncemHgx9akCCQ\nQCaHMGJAqG8D5paHT3PGgZ9YqM9WllBa2mtiUfUsyt7Yqu7HTCt18yOCVBNo\nb1M7OynPtzWEqGzYBvfgkA2oJdN0YImiC7Aid+w5QE3uuc2SzL1BP0pcKDPy\nLEQI5VZqZcA46e10oKTQsAy1IieyTf5Q1PKrQRZhekCM6CNjj/X4RW9JbzRc\nXBK9pDMlWxZa54M/nASdv93f9Oofg9X7hbMzE9yXGnareNU7YRteRLHj5j6s\nl93KKLUmxCfy6/h/LX5q8pZfyrfdjmjzvUMJkCetefIEetwL8DlqPPhWEgN5\nVGrzsNfpYLmV2T9xcXDewhFKhhCJPl+ulgWAsr0WvqHs3qqaxvsCTusy621i\nSB92\r\n=WuwR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGh2nRPAtywHsNV3zTEgWZZs/FqkPLesZw9XXQrtwy2QAiEA9pm5l9xGD2k5oFmFx19+kZoe5XMqUEUdoQCCdbcjPa0="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.8_1572339443811_0.06267002601191374"},"_hasShrinkwrap":false},"3.0.9":{"name":"earth-scripts","version":"3.0.9","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","connect-history-api-fallback":"1.6.0","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"6.3.0","eslint-config-react-app":"5.0.2","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"88e54b69eb0b9e965bab40a4713ad6f364e97dbc","_id":"earth-scripts@3.0.9","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-Uu3BzsKuOrzIclbvklgH3yymiwsxfloHIkTNPKNq35QDYvlCy/P/yblAH9S5LY2E/OWU+I0MiCpuos83jGqn0Q==","shasum":"88c89916f1c0a9e9cd480a181c540769c764e21a","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.9.tgz","fileCount":55,"unpackedSize":122016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduXbYCRA9TVsSAnZWagAAxIwP/15SR5h/DpdfvxWNugx3\ngEEdHVwYUdBDGkhyn4NVPABc5eXwCJvFZ3dKKGFc/niwsxnSMaUuGjLngi4S\nUa3L6/Tbb6Yrh3xkMbrBbGCoiusb3lGq53+i8fqse/KC89RVU6J/MuWT8JIc\nXd5BlmSj7xuu7TrvAhEzLPXKKEV/hMOS2LHlL31rueyzc92It16UEupQZtx9\njVKZLsNkcZTn7HsGW6MzDbW2gunYq6dw13TxXlxjq7O59zZ/0T6dkCaAfCNA\nmKd2a+CNtRGmVPzFkSiiwSQa6+qsqkBLPoRnzpS0N51A7/n6RKEtmGKMmEpr\n9xwiPGNOB2xPvFRlgqqSTkyUiN6zkp3wt5WODQf3aVrwhcg4iseV551BJQXL\n9+q9idCeX+P7wyyk+RofN92d14obdgWyB0OnE05gyiiZcLaqzi30BCLBSlxa\nguAozRwus5AqkxVLMFmPa27xND9P4zbBiMAuis0Lja5tPBfP+MRXAqlHMp3Y\n74lqNo+pv5fU5Amuw7VYJ5ObMlIkQkjRbk2dlozjq0kFA0zdfHWiGbqXWjB5\nWzhoBETufc9cH0gw7nGppyFbOQCDuRMgXndMQ0pm620nGdbrEEbpOnzhyPWs\nA2hTNxhHZIejY4HOwMYqTxZDIt44bq2Ps/FnRaO4Ow3j1xryMn7jYJ94NR71\nVLgo\r\n=k/k/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvehW+qqDHoVmjQ3Il0goP/6Fm2TOG1uAHnDOhgUDxHQIhANlNbITs1LtZWQ8oq+uZFiC5w/Bf1Z7+2Y5bhv4lw7j+"}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.9_1572435672456_0.31296430061308933"},"_hasShrinkwrap":false},"3.0.10-beta.1":{"name":"earth-scripts","version":"3.0.10-beta.1","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"6.3.0","eslint-config-react-app":"5.0.2","eslint-loader":"3.0.0","eslint-plugin-flowtype":"4.3.0","eslint-plugin-import":"2.18.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本 (webpack3、babel6、eslint5)\n\nreact ssr项目  使用`earth-scripts-ssr@0.x`版本\n\n**重要更新**：\n\n**`earth-scripts@3.x` 已升级至webpack4、babel7、eslint6**\n\n**项目内如有webpack3插件或者eslint5相关配置，需要注意升级**\n\n**原使用earth-scripts@1.x的项目升级至3.x版本时需要关注[doc下的3.x升级指南](https://github.com/FFF-team/earth-scripts/tree/master/doc/3.x%E5%8D%87%E7%BA%A7%E6%8C%87%E5%8D%97)**\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持entry.vendor, output, plugins，其他的字段都会被忽略\n    entry: {\n        vendor: ['other modules']\n    },\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...} // 同上\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\nGENERATE_SOURCEMAP=false // 不打包出sourcemap文件\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n\n### 单元测试\n\n [配置指南](https://github.com/FFF-team/earth-scripts/tree/master/doc/jest%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%8C%87%E5%8D%97)\n","readmeFilename":"README.md","gitHead":"6fbeb7a22701bbb6af3da221fcedf4426b632d4c","_id":"earth-scripts@3.0.10-beta.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-ECC1c4lEMsLDH/tXoo2q2bvFRBfWxvEPJSjUmFGmn1TqOYofRr96xUz+LRgo31ghln+K5hyRYPdGM1W1JGKpuw==","shasum":"7b820da6e8377773c7d42c16891c1eb9ea0cb41b","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.10-beta.1.tgz","fileCount":56,"unpackedSize":122450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvAq+CRA9TVsSAnZWagAAsqMQAI2QRF0Yyib3wXd2DMO1\nDutlQgCu0InoXe7Losrl4BDCfRV130cZUKTxF5tghqoIZ/qCGEU+79QzywE+\nu6G+r1bWETrfp7pKmRVzdRhdzVEXgKEXQ4FtJPnqDL+Z3GVVlHsK9KF19exr\nO/SnJMMwcoY+R4Ljx0c4HA6rANqAEvXRiyS8bV/QYWemy7Mg+TvQb4d9Goqu\nV/eCQnZS2WakncwNSPdi+XGeCjH8s3/TW+A1YuWo78wVaK8FX7uQae64nYLx\nekuGebL61kohEQiQjgz4RYvBydeL3E9DM4uKjQ+p/N7ObhjUrpC0ktmVjl4T\ntWhLnqKelEOMxlNC7RbRiWrPn1OE3MxILEJ6Y8/qTNz4n7ytC+6h7i2Bf3W6\nQy24FcgMq00g4FKxUyNaTAp+jC5pHecpmety8uF2uMc+3UtgOsC2GH3g4tmK\n2UJuS1q68IgnID/sIVAqv2/xtSbIXtB0upI2DOeYCEfocBswiJxYqWXH+2Se\nGliOt5JnRVnBzm69qzrojifBGHeUX9scbQf0nQAy9ipCu4HQX1gkLcjbQLOt\nBPVomfTHXEhpAhVJZLwk1CdjfqhKH2BMEMs4yMdhoTx/+RUlf4gdJP/klZka\ngPuaeoM8CL6jQE59No/Tq4cdXWDnwoLr+AZRgmmkh6TyRoY0+mQWjpIf7rgD\nyTwc\r\n=aTvj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE/CIMkMLSaCAu0YKYcRvmgJMRE18ruYk+mhgnsm3TndAiEAi7umMbZMoYXYJPwP/k7h9EEiHIFBwZyne0JAlxVIte4="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.10-beta.1_1572604606516_0.8291446135061842"},"_hasShrinkwrap":false},"3.0.10":{"name":"earth-scripts","version":"3.0.10","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"^10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"^6.3.0","eslint-config-react-app":"^5.0.2","eslint-loader":"^3.0.0","eslint-plugin-flowtype":"^4.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jsx-a11y":"^6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"c8a4dc51de358064ed5fb67dfc4c68138a46557d","_id":"earth-scripts@3.0.10","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-6z6xYyj79YKyNIbI65r4/yU7quEdpq1u16wUCgFEzSowfM2+6JIyqAAmDBsP4otZ6yp5jo7/vYplqYRvTWg18A==","shasum":"3fe59e2d087ef9393208d49979d0a7f2ab3fd665","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.10.tgz","fileCount":56,"unpackedSize":122450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdv5unCRA9TVsSAnZWagAAe7cP/1q4GnnE0QLGGWRjIcy0\nRMu6iJxpA6m8Bgr+AehvjT4BZtls9Nrq9oIzZYzGvfGlyv6nQyWRzZbQM+Pr\noh3+JO3LZuh1SUjXtZmKmRkmberDo7FYEBLL/xJdX41/csilZaf2YT+goHdP\nhta5Vqv0dbcRzhCmxLasXi/7lDehWVs9tisv6rl98vbLYWmIaMdj3+4guaVD\nXGa3livpnXooC8dqyDdGqC7uwX6H/M4b7AdVV8oTAgA+AZMhPWPWMnihTQpJ\nRQCRef7FEpgZcHML5BigI5Fns2duzDvlfjHqicmV/re0R5OQ5oZJDkIFXpQT\nttL7euMDNPWndZVCbAGUc/4JYF/PIH3Pjtjn73eUirNY+hvBMT8XZ4Upure3\nssNkMyo1bhuC2D/I1bvLcCnRhvQGCBbwBbGeo+j9NTAsY51HnOosgpx+CrYt\n0wwb9FNxD8QHLKIhpmySnc4Wj8kc1ZsftYGVJOS/RNXKgXOqIwkSSjLC2GPT\nv6BLNRwTC5e8z6a6Z51U/ibh4Xai5MK11L1n0jGuHzxec/AiS7mp9j8NDUAu\nBhmdw6HFigEiA7cwZ9lRErvWdBhHTo5Fq3Rjqx37FhasFqN6DeOuB/lO+dIy\nGB23/GimjuUjNhYF+SyfJk1QEmmFyU19KPW9mtF+dsUSyDFgbQDybXgiBQsA\nyvW4\r\n=HY9k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFPIbVdm7b0V4Cr2qfHbg07vvZ67qGlhF1nRvalvSAphAiBTZ6mmXDom/2JC0fgr7/JS9dfohenGwIjk8qQLbly00w=="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.10_1572838311130_0.5079532703691292"},"_hasShrinkwrap":false},"3.0.11":{"name":"earth-scripts","version":"3.0.11","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"^10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","copy-webpack-plugin":"^5.0.4","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"^6.3.0","eslint-config-react-app":"^5.0.2","eslint-loader":"^3.0.0","eslint-plugin-flowtype":"^4.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jsx-a11y":"^6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"12bbe165e451ff30ddcdfcfa07e05f6a37743232","_id":"earth-scripts@3.0.11","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-WibONteyl0uu5HZ1RXqe/vPJ1mWi7FQEQsrkhGBnX7LtJ8tMnML8HrDRJMKsUnEMMMRDYCKuQpMpelY4rOcXqQ==","shasum":"487446cbb15204222b99e191fd81fd860bb3f28f","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.11.tgz","fileCount":56,"unpackedSize":122725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwpWACRA9TVsSAnZWagAAim0P/jG1DS1k+gBKYmcM+Q6u\nkYQ9q7ku8RVrSB1DRgJrWQX2bktIcCaV1T7tYI3YLuqnCdMaCZwQErsWJlA/\nJCD+NZ5jdfFDYxIGXWlRWsxLsf7UH3ows0qVm96CMPv5gFKTqKylkeCZD0mn\n3XBN5UrwSqDLsr4fjiEOiSHa/TtLy6FYiYNZ0ffvuydtyW7mLeonkBQcpHeC\nbwKN/KAA5Qluk4h57jFAi8JH9XF7KduYrZJYb15tX25iX0ZFn+U5WaGP+EoL\n/rwIqEAy4ODbVS3OYn+d4uWn5TKhGWgN1R7EnwEgbmT1JmpJgME5aomWuHUQ\nil87TscO+6kA5O/e6UcyzVbyY0VGY8My0jL3t77/MWgm1fNMGP02CJaVNMLe\nkcQD7e8RSEUjLyAX7ig26yr/Rz6tL6dbN3r4JvyXFesqQI2ZDhLuYB3fAZxL\nEcb3sxX5yVexdWkrl069Bj7VyR4RtVMdTQt5K1ChZJz9StnA95yO5tmzTlTI\n3Ss9OkMZsh75F//HcG34yKGZMOScomoYKtnUoaAwQgA31bz9912EbUTu/xJN\nGJXksFGUZueDD9nt/z71ApN00Pn3dBCCGNGHgTuXd6kkzseNSOkh94ZSndGO\n1NqNI61cAIR5HfI/vvvgCqpy7IfZJnfA7lghsCkVhC8OGRXRIIgr8+DZQY3g\nwzDZ\r\n=pJbc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICFoXiFlnui2x+2iFyieax2KEblCzQW+J/dQlwKDCRIiAiAFwc6QKBTu+Sx88QuvOEia6Nkqs26P+vAR3nmaLx92EQ=="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.11_1573033344208_0.24419683068345677"},"_hasShrinkwrap":false},"3.0.12":{"name":"earth-scripts","version":"3.0.12","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"^10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","copy-webpack-plugin":"~5.1.0","core-js":"3.1.3","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"^6.3.0","eslint-config-react-app":"^5.0.2","eslint-loader":"^3.0.0","eslint-plugin-flowtype":"^4.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jsx-a11y":"^6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"d435308f5755603919ae88be39a6ec5ca40a1a8c","_id":"earth-scripts@3.0.12","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-QEjn/TBw2ZYisD/Om1M1YVU+BYE86j9lmbTPB2UlbNJOOfuKJ5nKac0DrFYG7ztKsyhRogiraWuCOFJ2902lEg==","shasum":"37994b41383cc049bdb54c58c359e0e9caae34fd","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.12.tgz","fileCount":56,"unpackedSize":122814,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd707BCRA9TVsSAnZWagAA2YQP+QGygLa9nocg+f0vlxpf\n1gsoaaBUbwKPaYMEd6b+0XQf3alq6mQmjuI9LpcfVfdtzEmEn53Ri//4NtJ5\nWZLWhTaenWwcjhyVWUspDvwqwkDOxzYKoA0SUz/vVtYt+g2FtlqmP1HS0W7e\nAkINeYT4PL3U6GLYUd/8kMtQfbxc+rKHgnyzYhRx/KQtv90CqP4WRLl/HLcH\nGI1x7wVWTrevVeLo9oC9qF9llkMmb2ibNRgpjqA5Qw95v2FFUDyfEHLEBxi6\nu8WrisQw4CWe0TNu1VakKLXXtnGknV6UlmM5cHVvYRdJQ8cNHc5mF8kGOcRz\npcvQCASLJRaYnGldNFVKp7jrNS1+TQ1BeUGC21VuqhAjgi7WG1RsnlzcxBsG\nB+PE0iFVKcY7UZ8BbFzW21HUUj8VhZJLma6xZHOU5O1yiWTfZrwJplD/i2di\n/9VOhQCX0dTRZ/JN2EFdXa0BrNbwoYQ/mtNGMmRsfvURcx8i5osRNZTGyHzM\nCRxOFBqkAvBNL00RX8XnECAZnMK8netrKomurozW0j60UpH3RihLEwyTxkzx\n9yk7GaotWEOqhmwzziZffu/DRb5KnZgMBFoHdYIin7ibM5vmDLLVU+ACmk09\nuguxOpZpM08TekwxlaZjv09JQ9IbCW5RNdMFiCH7W+M09wzwkOX+LVdu4fA1\naUw/\r\n=EAKx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC55oBLKnp2ZBSzyMC7le38j2bOkZPBwsxXNa8f4zKhlAIhAJKknzPIJXr2S1+HBiyDNUhGqoGBML+fYAFgCP7bd7LU"}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.12_1575964352938_0.21095064583156709"},"_hasShrinkwrap":false},"3.0.13-beta.0":{"name":"earth-scripts","version":"3.0.13-beta.0","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"^10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","copy-webpack-plugin":"~5.1.0","core-js":"3.5.0","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"^6.3.0","eslint-config-react-app":"^5.0.2","eslint-loader":"^3.0.0","eslint-plugin-flowtype":"^4.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jsx-a11y":"^6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本 (webpack3、babel6、eslint5)\n\nreact ssr项目  使用`earth-scripts-ssr@0.x`版本\n\n**重要更新**：\n\n**`earth-scripts@3.x` 已升级至webpack4、babel7、eslint6**\n\n**项目内如有webpack3插件或者eslint5相关配置，需要注意升级**\n\n**原使用earth-scripts@1.x的项目升级至3.x版本时需要关注[doc下的3.x升级指南](https://github.com/FFF-team/earth-scripts/tree/master/doc/3.x%E5%8D%87%E7%BA%A7%E6%8C%87%E5%8D%97)**\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持entry.vendor, output, plugins，其他的字段都会被忽略\n    entry: {\n        vendor: ['other modules']\n    },\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...} // 同上\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\nGENERATE_SOURCEMAP=false // 不打包出sourcemap文件\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n\n### 单元测试\n\n [配置指南](https://github.com/FFF-team/earth-scripts/tree/master/doc/jest%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%8C%87%E5%8D%97)\n","readmeFilename":"README.md","gitHead":"d435308f5755603919ae88be39a6ec5ca40a1a8c","_id":"earth-scripts@3.0.13-beta.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-BiKTh436elSt6epgFps8pOplCNyuXw0qocwM2d3pO3CTLeQYfSuv8GkFtTudBGmtHoorvcgq7CxpItczhFIMSg==","shasum":"58d4a315ed14d57117bd75fbd33de1a69258ba8c","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.13-beta.0.tgz","fileCount":56,"unpackedSize":121236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeAyQHCRA9TVsSAnZWagAAt0AQAJMDEC9LHuqTPUeNVE1D\nADvb0BmDiCfbxsWieiitrWpwSu9STQjRROa1p1xGVqmRwULESVNz0vGoMLXO\n5ajZN1H689uItiU2PAmxvB4Z79o86XqNKU9QVegDKAuFPkG3PSXROuZXHhW2\ndLEPvSeNVTfIAG5ka+NS4r/6QDl/coYW3UBD3/qXOoRKxIMxQpfA4k9HdAFC\nALYW0xoVdL3sJDS/K9fRRl6Tasnz8GwLEhkYgG68IgKmb7u7UtdEk3s93j1+\nEswdd2Xsj6yXen/ACPXcqj3HceKY+JO0W8kldDXpa/4Cq0TmPbmkE68v4YTC\nb7OkXm4IFaQV1YCOaRrFfPcxhwexhJUo9NhDE2RflfJoRFAfLGEwPCRI+bYh\nt2fiuxlyd3jpE9heSwrvWdURsX0pFr3jaAsBTo/kFUYyeDp9tox8vLjZWKqu\nZhiBdvSQvFWoBYEbWoZL6WUwEAPMM8QxN5b99AcZQebhCNzpjahg38aL1AyJ\nyD2hpp395pShDuN9oixxs3Wvp1wTENyjlVqJZnJEW8jTaLGUAYCiqor9ZbjY\nBQ8Eig8YQLU+QYAuUCcxKRGYCN319vhlNh1emgPg/+eSXVomlIoMgKEREPbx\nY2pGLcvWulDxM+yDZb7AAXUwwp17m398MS/rRjOR+6qcGogWrL4lABHcdnh9\npLuE\r\n=ni8A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZbpPb7lHDr1NaMdjUcaZhRpN550P2pBnVLBxne9JC5gIgLU9a3ORvsOQWT5cOUwPZEp6/dRKLGIXGqG11lQnBlHs="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.13-beta.0_1577264134920_0.6464798504529483"},"_hasShrinkwrap":false},"3.0.13":{"name":"earth-scripts","version":"3.0.13","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"^10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","copy-webpack-plugin":"~5.1.0","core-js":"3.5.0","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"^6.3.0","eslint-config-react-app":"^5.0.2","eslint-loader":"^3.0.0","eslint-plugin-flowtype":"^4.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jsx-a11y":"^6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"0e09a4fb954c2db4dbacc9b631e3174b8fdf12ea","_id":"earth-scripts@3.0.13","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-eEB/VzwSCmJtHbZqk6IyZ8O/91OJgTqOpjBJnwuOZHM4m3UJj4BHYlNMFFKeVHViok2t+Vl7zTz9+x+KF5P4dw==","shasum":"94f21c76b8ce560c7c73b306549d3216965ea113","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.13.tgz","fileCount":56,"unpackedSize":121481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFCxACRA9TVsSAnZWagAAOFgP/jUbw0YeWsASxwuFiIh9\n3NnlpvaAMD0LmUcEfDECPJITDTTwQ48L97/D4FDuH1Wn6xsp+nYVsJA4p+RL\ntPlL3ODfp7xHbK4pyTwSv2QKQSyfKOtEQ1u7gVtEBlsbKOtcZyahWgaOGKFJ\nIbXYm3PBq9Gfq4eXiHAnjheh18P2XRF0Oc5UexfuuanXGlK/23l9WHCQflvN\nFyf2/PIygoQdwNn/g7T0hhnD+FgYFoO+gIoZosVRfAT5BXGOahsigtmM5YlL\nq7RZ+5ariZZVH3IY9gb2YqIfqIRUP/hhl0ATZ7vv2s4+KlOauj5Sz0G4aDtR\nDts0Hbzf5HUo0Jtqq6ivs9ojh0HtYq5Qy3BwJNiWHqXchElIRGV/Av2FZ49l\nw6Cct346FJxkuSP4iGiQWpF8RryLc8b3J7GBMkrFL4i/cwy2rcT5pfZQ94Y2\nP14lf7MybCZ4sTIptaJ0SwRWeG3lGVtRkihpC5AakiAPoebKol+8UXYPOBT4\naX4sgCVTzVAE5Sz/sjnQNGTEVqsRHYxZ6J6ySoiBO1HpAjkwTche8EW7h/lg\noeYHHpn1S1qnT4j7gHlrPWVHhLPXJ723oih+X69BcsvV31sDnA3+1jnx5Jti\n277FZmUlHTh4jpxHRNEjren8QyBZmAIXWRnjc6/9SIGBPB2L4einGI1T9ITS\nunS/\r\n=b7PI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB09bhLLAL0Re8uXf1mWVEFkZKpIe8seyTeiYGAXSjhHAiEAj27gSUZBnv4WsBXDRbnQD6Y3pDAgt5s1Xi84MDXd34A="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.13_1578380351917_0.32520690703448274"},"_hasShrinkwrap":false},"3.0.13-beta.2":{"name":"earth-scripts","version":"3.0.13-beta.2","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"^10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","copy-webpack-plugin":"~5.1.0","core-js":"3.5.0","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"^6.3.0","eslint-config-react-app":"^5.0.2","eslint-loader":"^3.0.0","eslint-plugin-flowtype":"^4.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jsx-a11y":"^6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.9.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本 (webpack3、babel6、eslint5)\n\nreact ssr项目  使用`earth-scripts-ssr@0.x`版本\n\n**重要更新**：\n\n**`earth-scripts@3.x` 已升级至webpack4、babel7、eslint6**\n\n**项目内如有webpack3插件或者eslint5相关配置，需要注意升级**\n\n**原使用earth-scripts@1.x的项目升级至3.x版本时需要关注[doc下的3.x升级指南](https://github.com/FFF-team/earth-scripts/tree/master/doc/3.x%E5%8D%87%E7%BA%A7%E6%8C%87%E5%8D%97)**\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持entry.vendor, output, plugins，其他的字段都会被忽略\n    entry: {\n        vendor: ['other modules']\n    },\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...} // 同上\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\nGENERATE_SOURCEMAP=false // 不打包出sourcemap文件\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n\n### 单元测试\n\n [配置指南](https://github.com/FFF-team/earth-scripts/tree/master/doc/jest%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%8C%87%E5%8D%97)\n","readmeFilename":"README.md","gitHead":"0e09a4fb954c2db4dbacc9b631e3174b8fdf12ea","_id":"earth-scripts@3.0.13-beta.2","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-+diNQub3bRXJpAOzvGqLZsF9FrWR+NqXPSnzSEyxUtsVpUJfKMXdZ3lpvGmjir94ebkftLQUwx42jjisFHpVWQ==","shasum":"95e46101fdb0cb888041f05b43a65a58c4ab97e4","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.13-beta.2.tgz","fileCount":56,"unpackedSize":121488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFEb9CRA9TVsSAnZWagAA6MYP/0RzOTupFInEEWdUvCaZ\nw1joY2lTd8ztYykDQtwi+jaVBXbYcrCPCCfd1dT/Qxl5AHeZfRVx0d/MhuU4\n2ujtItnYbss7GsR/CUI0JqWewYDkK07HRvZaT2xXH83eDiL3cF6Y6gZCQF4Q\nxeumNj2dxHouRuDrn2cxBGLicMZk8ZhzszfATyK8lXP35CF2/MJy2NRsAQb2\ncdedqom+i0vkvRj+x2MxF3Ui8HfN91kHRUldAH4wW5HsZuOQPsY8QB2bZ9Df\nAUvSmXAR/RkCb/bz5eTScDukRxUc71qsT8a/gXsQifwNaH20fyX6tmCjzUqH\nvU/6yDwIRKRIZ7C7nbmNhU/q+7v8d4+CeHi/Gow8lIl+6eYzo2S6GntcQaVw\nWcvUf6/MVxaAtT0e6ktj5CFYZoClW8RUwArnXFLIpbK3j/l7pD5xfstKzBpF\nnmjBT+20diao8A5k/irwLU1lzFrNfY653tMx5vcWFjl/bnXAW6SV3uGm7UBj\nXSUBLCZEsmcYCOjEWWutFEcIAPagcST1JPnNSwd7NDSsnsyO2V60BKWHjpEA\nHxzXch/S6J3EECh65mAEqidNByz3EU4mtkG1iJRdC3n12EaP4lnekapEERbB\nnygWPJuCxg6snb0hnUKyDJejMj60p+ZIfajaJxhWXgzpbFtOkB5vyYpxv750\nO9L2\r\n=xIz8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFQ6xhVZ2emstRcuTFNO7UcdOUh/Yp8T07O6+QikDLagIhAJMQu/QhBjlGc+Qq/+a3CVI1Il+pt+LVON8NewKVCYoB"}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.13-beta.2_1578387197442_0.10283482120086185"},"_hasShrinkwrap":false},"3.0.14":{"name":"earth-scripts","version":"3.0.14","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"^10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","copy-webpack-plugin":"~5.1.0","core-js":"3.5.0","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"^6.3.0","eslint-config-react-app":"^5.0.2","eslint-loader":"^3.0.0","eslint-plugin-flowtype":"^4.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jsx-a11y":"^6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.7.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"0e09a4fb954c2db4dbacc9b631e3174b8fdf12ea","_id":"earth-scripts@3.0.14","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-EXeyiyfhj4EOrDWFpP1S7WYZCQr+R4zvyPVQ6Xm7rU0Qli1Mcz2F31gTyaReUP5XOVy7kdlU69YcY1LDdRU9NA==","shasum":"d4fcc3458bb11aaf7ce532fd5b94ea35e77e5d9b","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.14.tgz","fileCount":56,"unpackedSize":121594,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFEnwCRA9TVsSAnZWagAA4gwP/2a7PIpJxImx+Gyj7O+Y\nietvR1U6Xf+rzo/M48PuE9SEKxk3M5t1fiiX2o7yVYxvO2u/HzAFa23RXKgE\nnoGdX5A9uxN5t2ROTq0Sc0bU9okLjYVeOa1xgOptCXm8ix/nyPBsgUJykbfj\nAhPBgJU6bGWtvuFQ2Vm5tKITdzJMf+oMYbzwAh8CujO7YqeZCrwwZMlHg+Jq\ndz9hF+Pm/R28R+0QSZfkFp5tsNb76LD5J94PBsWmW+rfUFZ3sWo5uiUA67UE\nhJKIrZJslfSgOMi+TByPDOS5qiT3D3MviFqQNpW13s7Rky4vPvA4wFJ6uwIV\nMI4fbhR1AN6gWeubnfzDZLW4Xp6D/qwaB7l58ZE89BPpjvmXQy4zS3P8v+Kb\ntRnR/rdeEYLXQgSP6pQMb7zhDhAB5kcKlY5gLZdOOmi+oROgpRW0ftuCeXVG\nstI5HWh1/+fKMo/IX60V5MGmnWk20EDmy7cmARW1y096IxH0r89BN+NY7s0d\nQBnD6Psi3WLZK53ZlSBQz+Oph+w0nfnBtYtMUur1zyh/FtCfg63AuRH/lx6R\nT3oVr6nfMUs/hVNWIoMaQCUHASXvkjgJGdwFpRov3hPSinwBf1eHYYTxHJ7E\nRfFTRlaya0njYJ2Om24+vQW/dBfhf6gKWrq7Yc44YFNwUPFnc3QFfCJZnEau\nPKn9\r\n=cKvA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD58/IG8cPwlCKFYNtYo4CsxFnx2cowN7SUxO94IPSG2wIhAKCHE6G0wMHhbBGpqsmGrJ4pKo/v4Xo3HfoFRH88TRuK"}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.14_1578387951515_0.5105752204219822"},"_hasShrinkwrap":false},"3.0.13-beta.3":{"name":"earth-scripts","version":"3.0.13-beta.3","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"@babel/core":"7.4.5","@babel/preset-env":"7.4.5","@babel/runtime":"7.4.5","@testing-library/jest-dom":"4.1.0","@typescript-eslint/eslint-plugin":"^2.4.0","@typescript-eslint/parser":"^2.4.0","ajv":"^6.10.2","autoprefixer":"7.1.2","babel-eslint":"^10.0.1","babel-jest":"24.8.0","babel-loader":"8.0.6","babel-plugin-import":"1.12.0","babel-preset-react-app":"9.0.0","case-sensitive-paths-webpack-plugin":"2.2.0","chalk":"2.4.2","chokidar":"3.0.2","copy-webpack-plugin":"~5.1.0","core-js":"3.5.0","css-loader":"3.0.0","dotenv":"8.0.0","enzyme":"3.10.0","enzyme-adapter-react-16":"1.14.0","eslint":"^6.3.0","eslint-config-react-app":"^5.0.2","eslint-loader":"^3.0.0","eslint-plugin-flowtype":"^4.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jsx-a11y":"^6.2.3","eslint-plugin-react":"7.14.3","eslint-plugin-react-hooks":"2.0.1","file-loader":"4.0.0","fs-extra":"8.0.1","html-webpack-plugin":"^4.0.0-beta.8","html-webpack-tags-plugin":"2.0.15","http-proxy-middleware":"0.20.0","ip":"1.1.5","jest":"24.8.0","jest-fetch-mock":"2.1.2","jest-localstorage-mock":"2.4.0","jest-watch-typeahead":"0.4.0","json-server":"0.15.0","lm-flexible":"0.1.1","lodash":"4.17.15","mini-css-extract-plugin":"0.9.0","node-sass":"4.12.0","object-assign":"4.1.1","optimize-css-assets-webpack-plugin":"5.0.3","pinkie-promise":"2.0.1","postcss-flexbugs-fixes":"4.1.0","postcss-loader":"3.0.0","promise":"8.0.3","raf":"3.4.1","react-dev-utils":"9.0.1","react-error-overlay":"5.1.6","react-test-renderer":"16.8.6","sass-loader":"7.1.0","style-loader":"0.23.1","sw-precache-webpack-plugin":"0.11.5","ts-loader":"6.0.2","typescript":"^3.5.1","uglifyjs-webpack-plugin":"2.2.0","url-loader":"2.0.0","webpack":"^4.39.3","webpack-bundle-analyzer":"3.4.1","webpack-dev-server":"3.7.1","webpack-manifest-plugin":"2.0.4","webpack-merge":"4.1.1","whatwg-fetch":"3.0.0"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本 (webpack3、babel6、eslint5)\n\nreact ssr项目  使用`earth-scripts-ssr@0.x`版本\n\n**重要更新**：\n\n**`earth-scripts@3.x` 已升级至webpack4、babel7、eslint6**\n\n**项目内如有webpack3插件或者eslint5相关配置，需要注意升级**\n\n**原使用earth-scripts@1.x的项目升级至3.x版本时需要关注[doc下的3.x升级指南](https://github.com/FFF-team/earth-scripts/tree/master/doc/3.x%E5%8D%87%E7%BA%A7%E6%8C%87%E5%8D%97)**\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持entry.vendor, output, plugins，其他的字段都会被忽略\n    entry: {\n        vendor: ['other modules']\n    },\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...} // 同上\n    },\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\nGENERATE_SOURCEMAP=false // 不打包出sourcemap文件\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```\n\n### 单元测试\n\n [配置指南](https://github.com/FFF-team/earth-scripts/tree/master/doc/jest%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%8C%87%E5%8D%97)\n","readmeFilename":"README.md","gitHead":"c42f52c891b174ede54f024544a28913d853653d","_id":"earth-scripts@3.0.13-beta.3","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-d9qszGJHMp0JUrSmVdo6tYKy9v5Znnm5EHKeXioiQOezbyhtuAcPGW8YZPgJgiUWWMa7B6ABcLMubT94iOuhgw==","shasum":"3fd6fd279536cebdceb309071c8f46637735d14c","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-3.0.13-beta.3.tgz","fileCount":56,"unpackedSize":121601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFWMuCRA9TVsSAnZWagAAwyUP/1TCQvOs5qsYGz3utczd\nXFhpaLKt1VpgcyG6MTQ9Hq87d5OTiRoDdLbiGVFPLZTD6ds4oVxn6i/C3dt3\n7hvzBWpM0vcZjMt3lSwCRYS8PKqigpKvNzb2U0lEEZ3eJ/p48+cGPW5r5uHK\nx8u9VdRJzEfenNTF4Xme3NpPSW5v5rNNxjAS2GQmYyhbnxDKebE5T0atqFJ5\nEfn8zolFZv1A8jOiPF4Y2aQtQLKxMvpqByGjjxqVBCK3NqFXdYdoH7HH6a8u\nABTyEkl/NB6JNQnWKDz7w6s9c82xBCLk2G0FFvn7qfEjjZrY2qXGs4DGawgO\nESjavimwGVAze6Spa9BtUpaHoVO99luDFgNPfbZQUo8sBY8e/iqyVB+kqh3K\n3FHL5oj2xt7JqiZvgrx4N9tpE8OVEUrOcDFUdalW8YFYwURplS4hRH7Izw2Z\n2dPloapKSgv53upTDTAwLid7tIr39FFajnFOPXdezxCEpYry9c6Uz3PYXYPr\nt2AdxJ/ycnzYCCqwqZ3XQOY67UnB1xfA9aPzWEFcm8C+fpo0QDbAKA8CYL3e\nxxLOJRQDVl6PtiwX/vXQvBNSt7wU5mo/kWzPoWyg1i17OUKYJisWH1UMwAzK\ny+TMMTbRWw+cxf7ills3muC8+PP6NpB0umIGm+38FOYnVLqDSpsC2VS67MJL\nLKqQ\r\n=R6F0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC6KkRJoeh/t8v/P619mFS7v0ON5Pa8siDux1AjMumqqAiBkJ/8ZJUmnA+k478Km/iuYKThU0IfDDSTEfwArU9sMKg=="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_3.0.13-beta.3_1578459950306_0.8871068707045626"},"_hasShrinkwrap":false},"1.0.11":{"name":"earth-scripts","version":"1.0.11","description":"earth for node script","bin":{"earth-scripts":"./index.js"},"repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"author":"","license":"ISC","bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"dependencies":{"autoprefixer":"7.1.2","babel-core":"6.25.0","babel-eslint":"9.0.0","babel-jest":"20.0.3","babel-loader":"7.1.1","babel-plugin-import":"1.5.0","babel-preset-env":"1.7.0","babel-preset-react-app":"^3.0.2","babel-runtime":"6.26.0","case-sensitive-paths-webpack-plugin":"2.1.1","chalk":"1.1.3","chokidar":"^2.0.3","connect-history-api-fallback":"^1.5.0","core-js":"^2.5.7","css-loader":"0.28.4","dotenv":"4.0.0","eslint":"5.6.0","eslint-config-react-app":"3.0.5","eslint-loader":"2.1.1","eslint-plugin-flowtype":"2.50.1","eslint-plugin-import":"2.14.0","eslint-plugin-jsx-a11y":"6.1.2","eslint-plugin-react":"7.11.1","extract-text-webpack-plugin":"3.0.0","file-loader":"0.11.2","fs-extra":"3.0.1","html-webpack-cdn-path-plugin":"0.1.3","html-webpack-externals-plugin":"3.6.0","html-webpack-plugin":"2.29.0","ip":"^1.1.5","jest":"20.0.4","json-server":"^0.12.1","lm-flexible":"^0.1.1","lodash":"^4.17.5","node-sass":"^4.5.3","object-assign":"4.1.1","pinkie-promise":"^2.0.1","postcss-flexbugs-fixes":"3.2.0","postcss-loader":"2.0.6","promise":"^8.0.1","raf":"^3.4.0","react-dev-utils":"3.1.0","react-error-overlay":"1.0.10","sass-loader":"^6.0.6","style-loader":"0.18.2","sw-precache-webpack-plugin":"0.11.4","ts-loader":"3.5.0","url-loader":"0.5.9","webpack":"3.5.1","webpack-bundle-analyzer":"2.10.0","webpack-dev-server":"2.7.1","webpack-manifest-plugin":"1.2.1","webpack-merge":"4.1.1","whatwg-fetch":"2.0.3"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","_from":"earth-scripts@1.0.6","_resolved":"http://registry.npm.taobao.org/earth-scripts/download/earth-scripts-1.0.6.tgz","gitHead":"e9a2e417c78feb11f13a0758d1dda6c32b97d4cc","_id":"earth-scripts@1.0.11","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"khy","email":"khongyan@gmail.com"},"dist":{"integrity":"sha512-Cc+2NleaMaqsoid+t+iygCzqE9ZTTjRz1DDRIZnFT8X4V40m4/5MuqDgzq4eKgEXHDAVWEt4MB/t5xOEPlq8iQ==","shasum":"4e1609fb83afd5c83bae62098ee0335e2f1ba3a2","tarball":"https://registry.npmjs.org/earth-scripts/-/earth-scripts-1.0.11.tgz","fileCount":43,"unpackedSize":104162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfI6OMCRA9TVsSAnZWagAA9PoP/RgfIFoF1zNe3ysTG9i0\n3WvNFOgZwpzdJ/rMnzBV52wdwMNlR3rRUpbjrf1EK7Gq/AkJcOulUFRypjqv\noK+fK9PHw3C+zxgNx1wiHfO0n//qgJ6V24zWvIzrz3BVDifu7SxUExgc4irU\nbNOMmzBLRwQj9OwK1XVpdRjaOb49taZZSmG3fzHy9JzieWTnbsoOHOrjCHTH\nzVRbKe+0Om5JfdgQKSBj7Rf29uRK/CZzUzu2YRVNcJXMJ3Ii3sE9gZOtQeWg\nGMPQNuaKCpbmYrw+vA3hUGarl7moeDbsrCe7OTxLAR67/fywxgwN1keGGsfo\nZZE4XgHDInDsQlM/QmZNvhJ1qDzy1xfOcUchWQUDhW/aJCO+y0Y1NLPqyVxM\nCWjnqHIBcXPQgeKEUmHEU1Qhhurzjq4YOEZryOoBoloheE4v3R9ApEecxtyt\nx+hCxqBr7r+iBLGXIOkrdGItWjjXXJCAVDMnvPNCmXReqP2wQQbjDoyzMGcW\n5diBq5/3wqxgj0uBX8fsRTYgJmNlcbxtMmaip8NH8NZ9Sr85lT85z+17ELql\nDITrt29lW5iRPazqWsJ8lyUiNPdYDf7PbTIFul5RXXH+lY3DAhTLyuTOqAhW\nDCS3tBzxJ4141w2APLr0VTUChgz2RnW3nS9kI650BVj3jbkae8F4BLPwnpKU\nJG0C\r\n=ia8O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGFvWVcQ5dceGPRZHSWmoFf87AD2y8KVG/KWW4lCjUUvAiBpnTXJKTl6Z32XtwSYKA6HmjNpTulCKkczW8O9TE+v4g=="}]},"maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/earth-scripts_1.0.11_1596171148414_0.3480551263007463"},"_hasShrinkwrap":false}},"readme":"### 注：\nreact v15.x 使用`earth-scripts@0.x`版本\n\nreact v16.x 使用`earth-scripts@1.x`版本\n\n### config\n* polyfill.js\n* webpack.config.dev.js\n* webpack.config.prod.js\n\n\n* alias.js `deprecated, webpackConfig.resolve.alias代替`\n   ```\n   module.exports = {\n     moduleName: '/path-to-module/xx'\n   }\n   ```\n* cdnPath.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     prodJsCDN: 'http://j1.cdn.com',\n     prodCssCDN: 'http://c1.cdn.com',\n     prodImgCDN: 'http://img1.cdn.com',\n     prodMediaCDN: 'http://media1.cdn.com'\n   }\n   ```\n* filenames.js  `deprecated, webpackConfig.output.publicPath代替`\n   ```\n   module.exports = {\n     dev: {\n          js: 'static/js/[name].js',\n          jsChunk: 'static/js/[name].chunk.js',\n          css: '', // 在<style>中，无需配置\n          img: 'static/img/[name].[hash:8].[ext]',\n          media: 'static/media/[name].[hash:8].[ext]'\n     },\n     prod: {\n         js: `static/js/[name].[chunkhash:8].js`,\n         jsChunk: `static/js/[name].[chunkhash:8].chunk.js`,\n         css: `static/css/[name].[chunkhash:8].css`,\n         img: `static/img/[name].[chunkhash:8].[ext]`,\n         media: `static/media/[name].[chunkhash:8].[ext]`\n     }\n   }\n   ```\n\n\n\n### 扩展webpack配置\n\n在项目下建立config/webpack.config.dev.js 或者 config/webpack.config.prod.js来修改默认webpack配置\n\n例：\n\nwebpack.config.dev.js\n\n```\nmodule.exports = {\n    // todo: 支持output, externals, plugins，其他的字段都会被忽略用默认的\n    output: {\n        // 注： 确保 publicPath 总是以斜杠(/)开头和结尾\n        publicPath: '/abc/',\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n            js: 'static/js/[name].js',\n            jsChunk: 'static/js/[name].chunk.js',\n            css: '', // 在<style>中，无需配置\n            img: 'static/img/[name].[hash:8].[ext]',\n            media: 'static/media/[name].[hash:8].[ext]'\n        }\n    },\n    resolve: {\n        alias: {...}\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {\n        exclude: ['node_modules,', 'src/static'] // 不需要css module的文件\n        localIdentName: '[name]__[local]-[hash:base64:5]' // class命名方式\n    },\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n\n\n```\n\nwebpack.config.prod.js\n\n```\nmodule.exports = {\n    // todo: 支持output，entry.vendor, plugins，其他的字段都会被忽略\n    output: {\n        // 字符串形式。\n        // 资源用统一的cdn路径。\n        publicPath: 'https://xxx.xxx.cdn',\n        // or 对象形式。不同资源用不同的cdn\n        // publicPath: {\n        //    js: 'https://x1.xxx.cdn',\n        //    css: 'https://x2.xxx.cdn',\n        //    img: 'https://x3.xxx.cdn',\n        //    media: 'https://x4.xxx.cdn'\n        // }，\n        // 将原来的config/filenames.js配置到这里\n        filenames: {\n             js: 'static/js/[name].js',\n             jsChunk: 'static/js/[name].chunk.js',\n             css: '', // 在<style>中，无需配置\n             img: 'static/img/[name].[hash:8].[ext]',\n             media: 'static/media/[name].[hash:8].[ext]'\n        }\n    }\n    entry: {\n        vendor: ['immutable'],\n    },\n    resolve: {\n        alias: {...} // 同上\n    }\n    externals: {\n        echarts : {\n            root: \"echarts\", // 指向全局变量\n            entry: { // cdn地址\n                path: 'https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.2/echarts.js',\n                type: 'js',\n            },\n            files: ['index.html', 'test.html'] // 适用于哪个文件\n        },\n        jquery: {\n            root: \"jQuery\", // 暴露给window的变量，例window.jQuery。 使用：import jQuery from 'jquery'\n            entry: { // cdn地址\n                path: 'http://code.jquery.com/jquery-3.3.1.min.js',\n                type: 'js',\n            },\n            files: ['index.html'] // 适用于哪个文件\n        }\n    },\n    cssModule: {} // 同上\n    plugins: [\n        // 可添加额外的plugins。如果添加的plugin在默认plugin里有，则会忽略\n    ]\n};\n\n```\n\n##### 相关资料\n\n * css module\n    * [css module](https://github.com/css-modules/css-modules)\n\n    * [CSS Modules 详解及 React 中实践](https://github.com/camsong/blog/issues/5)\n\n * [webpack alias](https://webpack.js.org/configuration/resolve/#resolve-alias)\n\n * [webpack publicPath](https://webpack.js.org/guides/public-path/)\n\n### 使用.env\n\n项目根目录下添加.env.development或.env.production文件\n\ndevelopment环境下使用.env.development\n\nproduction环境下使用.env.production\n\n例：\n```\ndev环境下配置：\nHOST=3001 // 自定义端口号\nBROWSER_ROUTER=true // 是否使用BrowserRouter\n\nprod环境下配置：\nENABLE_BUNDLE_ANALYZE=true // 在npm run build后会启用js包分析工具\n\n```\n\n### mock server\n\nnpm run start在\"proxy\"的地址是localhost、127.0.0.1、本机ip时会启动mockserver，port为配置的端口号。\n否则不会在本机启动mock server\n\n```\n”proxy”: “http://localhost:3001/“\n```\n\n### 自定义mock server\n\npackage.json增加字段:\n```\n\"mockRoot\":\"server.js\"\n```\n\nserver.js为mock文件夹下自定义的mock server启动文件。如果不配置，则用默认的server\n\n可通过 **npm run start -- stopmock**在dev环境下不启用mock\n\n### dev环境下browserRouter优化\n\npage.html在url上会转化为page\n\n例:\n```\nhttp://localhost:3000/index.html/[browerRouter内容]\n```\n\n 会转化为\n\n ```\n http://localhost:3000/index/[browerRouter内容]\n ```\n\n需要在Router配置中加basename： publicPath(如果设置) + pageName\n```\n\n// publicPath： '/abc/'\n// 当前pagename： 'pay.html'\n\n<Router basename='/abc/pay'>\n  ....\n</Router>\n\n```","maintainers":[{"email":"946401639@qq.com","name":"davidfeng"},{"email":"khongyan@gmail.com","name":"khy"},{"email":"caoxuewei@58ganji.com","name":"sherry.cao"}],"time":{"modified":"2022-06-16T03:19:01.786Z","created":"2017-09-28T12:58:28.676Z","0.1.0":"2017-09-28T12:58:28.676Z","0.1.1":"2017-09-29T06:29:28.749Z","0.1.2":"2017-09-29T06:35:31.675Z","0.1.3":"2017-09-29T07:09:32.007Z","0.1.4":"2017-09-29T07:19:59.321Z","0.1.5":"2017-10-20T11:33:43.142Z","0.1.6":"2017-11-16T03:09:20.826Z","0.1.7":"2018-03-07T09:09:56.937Z","0.1.8":"2018-04-20T07:05:15.066Z","0.1.9":"2018-04-27T08:30:09.499Z","0.1.10":"2018-05-09T05:58:40.864Z","0.2.0":"2018-06-04T03:36:25.605Z","0.2.1":"2018-06-07T08:34:00.440Z","0.2.2":"2018-06-07T08:44:55.958Z","0.2.3":"2018-06-07T09:12:01.213Z","1.0.0-beta":"2018-06-08T06:14:13.280Z","1.0.0-beta.2":"2018-06-08T06:52:58.733Z","1.0.0-beta.3":"2018-06-08T07:18:50.864Z","1.0.0-beta.4":"2018-06-08T07:26:34.865Z","1.0.0":"2018-06-08T08:03:15.266Z","1.0.1":"2018-06-08T12:31:29.708Z","0.2.4":"2018-06-13T08:23:08.181Z","1.0.2-beta":"2018-06-19T07:04:21.960Z","1.0.2":"2018-06-19T09:24:43.909Z","1.0.3":"2018-06-26T12:17:11.558Z","0.2.5":"2018-06-26T12:20:25.590Z","0.2.6":"2018-07-06T10:25:21.912Z","1.0.4":"2018-07-06T10:30:12.762Z","0.2.7":"2018-09-06T03:49:36.333Z","1.0.5":"2018-09-06T03:52:22.122Z","1.1.0-alpha.0":"2018-09-20T08:38:56.254Z","1.1.0-alpha.1":"2018-09-25T09:28:28.845Z","1.1.0-alpha.2":"2018-09-30T09:45:43.806Z","1.1.0-alpha.3":"2018-10-18T07:15:14.695Z","1.1.0-alpha.4":"2018-10-19T11:29:32.818Z","1.1.0-alpha.5":"2018-10-22T08:12:17.402Z","1.1.0-alpha.6":"2018-10-24T06:48:09.146Z","1.1.0-alpha.7":"2018-10-25T02:53:43.680Z","1.1.0-alpha.8":"2018-10-26T07:35:59.906Z","1.0.6-beta.0":"2018-11-05T06:30:43.506Z","1.0.6":"2018-11-05T12:13:06.851Z","1.1.0-alpha.9":"2018-11-10T03:16:22.114Z","1.1.0-alpha.10":"2018-11-10T03:47:39.533Z","1.1.0-alpha.11":"2018-11-10T09:18:59.260Z","1.1.0-alpha.12":"2018-11-14T05:07:25.571Z","1.1.0-alpha.13":"2018-11-14T08:10:08.628Z","1.1.0-alpha.14":"2018-11-16T06:08:30.064Z","1.1.0-alpha.20":"2018-11-27T08:07:46.322Z","1.1.0-alpha.21":"2018-11-27T11:26:16.938Z","1.1.0-alpha.22":"2018-11-28T06:59:22.596Z","1.1.0-alpha.23":"2018-11-28T08:55:26.705Z","1.1.0-alpha.24":"2018-12-01T06:10:15.138Z","1.1.0-alpha.25":"2018-12-05T03:04:52.501Z","1.1.0-alpha.26":"2018-12-14T02:24:41.321Z","1.1.0-alpha.27":"2018-12-17T08:39:53.536Z","1.1.0-alpha.28":"2018-12-17T09:15:59.314Z","1.1.0-alpha.29":"2018-12-21T07:08:43.936Z","1.1.0-alpha.30":"2018-12-21T10:18:08.421Z","2.0.0-beta.0":"2018-12-26T03:52:04.682Z","2.0.0-beta.1":"2018-12-26T05:39:32.176Z","2.0.0-beta.2":"2019-01-02T09:08:37.207Z","2.0.0-beta.3":"2019-01-02T12:16:07.190Z","2.0.0-beta.4":"2019-01-05T12:40:57.477Z","2.0.0-beta.5":"2019-01-07T03:18:59.999Z","2.0.0-beta.6":"2019-01-09T06:48:39.178Z","2.0.0-beta.7":"2019-01-09T09:51:58.004Z","2.0.0-beta.8":"2019-01-11T03:48:08.477Z","2.0.0-beta.9":"2019-02-13T03:27:26.850Z","2.0.0-beta.1.0.0":"2019-02-14T10:47:14.201Z","2.0.0-beta.1.0.1":"2019-02-18T08:58:36.365Z","2.0.0-beta.1.1.0":"2019-02-21T12:10:41.212Z","2.0.0-beta.10":"2019-02-22T06:15:58.274Z","2.0.0-beta.11":"2019-02-22T07:11:10.047Z","2.0.0-beta.1.1.1":"2019-03-01T10:30:49.843Z","2.0.0-beta.1.1.2":"2019-03-01T11:25:08.270Z","2.0.0-beta.1.1.3":"2019-03-04T12:42:06.559Z","2.0.0-beta.1.1.4":"2019-03-07T12:08:28.373Z","2.0.0-beta.1.1.5":"2019-03-19T02:38:40.229Z","2.0.0-beta.1.2.0":"2019-03-21T11:44:21.375Z","2.0.0-beta.1.2.1":"2019-03-26T06:20:52.777Z","2.0.0-beta.1.2.2":"2019-03-26T06:41:41.173Z","1.0.7-beta.1":"2019-04-03T06:53:59.799Z","1.0.7":"2019-04-03T08:55:33.005Z","1.0.8-beta.0":"2019-04-04T06:29:44.530Z","1.0.8":"2019-04-08T11:53:19.705Z","2.0.0-beta.1.2.3":"2019-04-25T09:59:41.741Z","1.0.9":"2019-05-22T02:28:30.848Z","2.0.0-beta.2.0.0":"2019-06-17T12:40:57.647Z","2.0.0-beta.2.0.1":"2019-06-19T08:23:09.208Z","1.0.10":"2019-06-19T10:14:39.630Z","2.0.0-beta.2.1.0":"2019-06-19T12:48:16.273Z","1.1.0":"2019-07-19T08:30:46.251Z","3.0.0-alpha.0":"2019-09-04T10:51:21.237Z","3.0.0-alpha.1":"2019-09-05T02:00:26.756Z","3.0.0-alpha.2":"2019-09-05T07:18:21.063Z","3.0.0-alpha.3":"2019-09-05T12:02:55.195Z","3.0.0-alpha.4":"2019-09-06T10:08:55.208Z","3.0.0":"2019-09-06T10:37:15.696Z","3.0.1":"2019-09-10T07:34:44.040Z","3.0.2-beta":"2019-09-19T08:03:18.986Z","3.0.2":"2019-09-19T10:14:58.260Z","3.0.3":"2019-09-25T09:02:59.626Z","3.0.4":"2019-10-15T06:49:49.208Z","3.0.5":"2019-10-15T06:58:46.093Z","3.0.6":"2019-10-17T10:09:47.943Z","3.0.7":"2019-10-29T08:32:48.496Z","3.0.8":"2019-10-29T08:57:23.976Z","3.0.9":"2019-10-30T11:41:12.611Z","3.0.10-beta.1":"2019-11-01T10:36:46.678Z","3.0.10":"2019-11-04T03:31:51.259Z","3.0.11-beta.0":"2019-11-06T09:21:58.634Z","3.0.11":"2019-11-06T09:42:24.331Z","3.0.12":"2019-12-10T07:52:33.253Z","3.0.13-beta.0":"2019-12-25T08:55:35.115Z","3.0.13":"2020-01-07T06:59:12.090Z","3.0.13-beta.1":"2020-01-07T08:26:38.559Z","3.0.13-beta.2":"2020-01-07T08:53:17.574Z","3.0.14":"2020-01-07T09:05:51.685Z","3.0.13-beta.3":"2020-01-08T05:05:50.470Z","1.0.11":"2020-07-31T04:52:28.578Z"},"homepage":"https://github.com/FFF-team/earth-scripts#readme","repository":{"type":"git","url":"git+https://github.com/FFF-team/earth-scripts.git"},"bugs":{"url":"https://github.com/FFF-team/earth-scripts/issues"},"license":"ISC","readmeFilename":"README.md"}