├── .babelrc ├── .gitignore ├── README.md ├── _config.yml ├── dist └── bundle.js ├── erweima.png ├── example ├── .gitignore ├── README.md ├── build │ ├── asset-manifest.json │ ├── favicon.ico │ ├── index.html │ ├── manifest.json │ ├── service-worker.js │ └── static │ │ ├── css │ │ ├── main.f8ccf616.css │ │ └── main.f8ccf616.css.map │ │ └── js │ │ ├── main.cfdfafeb.js │ │ └── main.cfdfafeb.js.map ├── config │ ├── env.js │ ├── jest │ │ ├── cssTransform.js │ │ └── fileTransform.js │ ├── paths.js │ ├── polyfills.js │ ├── webpack.config.dev.js │ ├── webpack.config.prod.js │ └── webpackDevServer.config.js ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ └── manifest.json ├── scripts │ ├── build.js │ ├── start.js │ └── test.js ├── src │ ├── App.css │ ├── App.js │ ├── App.test.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ └── registerServiceWorker.js └── yarn.lock ├── package.json ├── src ├── backTop.js ├── imgs │ ├── backTop.png │ ├── fail.png │ ├── loading.png │ ├── pull.png │ └── success.png ├── index.js └── style.less └── webpack.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["env", "react", "stage-1"], 3 | "plugins": [ 4 | [ 5 | "transform-runtime", 6 | { 7 | "helpers": false, 8 | "polyfill": false, 9 | "regenerator": true, 10 | "moduleName": "babel-runtime" 11 | } 12 | ]] 13 | } 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | /.idea 3 | 4 | # dependencies 5 | /node_modules 6 | 7 | # testing 8 | /coverage 9 | 10 | # misc 11 | .DS_Store 12 | .env.local 13 | .env.development.local 14 | .env.test.local 15 | .env.production.local 16 | 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-scroll-mobile 2 | --- 3 | 4 | 1. react移动端滚动组件,支持上拉加载、下拉刷新、返回顶部。 5 | 2. [项目源码](https://github.com/Fuphoenixes/react-scroll-mobile) 6 | 3. 觉得好用给个star,谢啦! 7 | 8 | ## example 9 | ![erweima](https://fuphoenixes.github.io/example/erweima/react-scroll-mobile.png) 10 | 11 | ## Install 12 | 13 | ``` 14 | npm install react-scroll-mobile 15 | ``` 16 | 或 17 | ``` 18 | yarn add react-scroll-mobile 19 | ``` 20 | 21 | ## Usage 22 | 23 | ``` 24 | import Scroll from 'react-scroll-mobile' 25 | 26 | const timeout = delay => new Promise(resolve => setTimeout(resolve,delay)); 27 | 28 | class App extends Component { 29 | 30 | state = { 31 | list:[], 32 | noMore: false 33 | } 34 | 35 | pageIndex = 1; 36 | 37 | componentDidMount(){ 38 | //首次加载时,可以主动触发下拉加载动效,更炫酷 39 | this.scrollRef.pullDownRefresh(this.pullDownRefresh) 40 | } 41 | 42 | pullDownRefresh = async ()=>{ 43 | this.pageIndex = 1; 44 | await this.getData(); 45 | }; 46 | 47 | pullUpLoad = async ()=>{ 48 | this.pageIndex ++; 49 | await this.getData(); 50 | }; 51 | 52 | getData = async ()=>{ 53 | //模拟请求和数据 54 | await timeout(1000); 55 | let res = [0,1,2,3,4,5,6,7,8,9]; 56 | // 模拟没有数据了 57 | if(this.pageIndex > 4 )res = []; 58 | 59 | const list = this.pageIndex === 1 ? res : this.state.list.concat(res); 60 | this.setState({ 61 | list, 62 | noMore: res.length === 0 63 | }) 64 | } 65 | 66 | render() { 67 | const { list, noMore } = this.state; 68 | 69 | return ( 70 |
71 | this.scrollRef = el} 73 | pullDownRefresh={this.pullDownRefresh} 74 | pullUpLoad={this.pullUpLoad} 75 | noMore={noMore} 76 | backTop 77 | > 78 | 83 | 84 |
85 | ); 86 | } 87 | } 88 | 89 | export default App; 90 | 91 | ``` 92 | 93 | ## API 94 | 95 | ### 选项 96 | | 属性 | 类型 | 默认值 | 说明 | 97 | | ---- | ---- | ---- | ---- | 98 | | pullDownRefresh | Function | null | 下拉刷新时的回调函数,需要返回一个Promise来获取刷新状态,resolve刷新成功,reject刷新失败,建议直接使用async await 99 | | pullUpLoad | Function | null | 上拉加载时的回调函数,需要返回一个Promise来获取加载状态,resolve加载成功,reject加载失败,建议直接使用async await 100 | | noMore | Boolean | false | 上拉加载时,是否还有更多数据 101 | | noMoreTip | String/ReactComponent | '我是有底线的' | 上拉加载时,没有更多数据的提示语 102 | | backTop | Boolean/ReactComponent | false | 右下角返回顶部组件,设置为true时显示自带的组件,设置为ReactComponent是即使用自定义的返回顶部组件替换 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /dist/bundle.js: -------------------------------------------------------------------------------- 1 | module.exports=function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=5)}([function(e,t){e.exports=require("react")},function(e,t,n){var o=n(8);"string"==typeof o&&(o=[[e.i,o,""]]);var r={hmr:!0};r.transform=void 0;n(10)(o,r);o.locals&&(e.exports=o.locals)},function(e,t){e.exports="data:image/png;base64,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"},function(e,t){e.exports="data:image/png;base64,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"},function(e,t){e.exports="data:image/png;base64,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"},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e){return function(){var t=e.apply(this,arguments);return new Promise(function(e,n){function o(r,i){try{var a=t[r](i),l=a.value}catch(e){return void n(e)}if(!a.done)return Promise.resolve(l).then(function(e){o("next",e)},function(e){o("throw",e)});e(l)}return o("next")})}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var A=n(6),u=o(A),s=function(){function e(e,t){for(var n=0;no.scrollTop?"up":"down";o.scrollTop=e.target.scrollTop,e.target.scrollHeight-e.target.scrollTop-e.target.clientHeight<10&&"up"===u&&(!a||r||l||1===n||o.pullUpLoad()),A&&(o.wrapperEl.scrollTop>o.wrapperEl.clientHeight&&!o.state.backTopVisible?(o.setState({backTopVisible:!0}),o.state.backTopVisible=!0):o.wrapperEl.scrollTop<=o.wrapperEl.clientHeight&&o.state.backTopVisible&&(o.setState({backTopVisible:!1}),o.state.backTopVisible=!1))},o.touchStartHandle=function(e){if(!(e.touches.length>1)){var t=e.touches[0];o.wrapperEl.scrollTop<=0||o.wrapperEl.scrollHeight===o.wrapperEl.scrollTop+o.wrapperEl.clientHeight?(o.state.move=!0,o.setState({move:!0}),o.touchX=t.clientX,o.touchY=t.clientY,o.time=(new Date).getTime(),o.wrapperEl.scrollTop<=0?o.type="pullDown":o.type="pullUp"):(o.state.move=!1,o.setState({move:!1}))}},o.touchMoveHandle=function(e){if(!(e.touches.length>1)&&o.state.move){var t=o.props,n=t.pullDownRefresh,r=t.pullUpLoad,i=e.touches[0],a=i.clientX-o.touchX,l=i.clientY-o.touchY;"pullDown"===o.type&&(l<0||!n)||"pullUp"===o.type&&(l>0||!r||o.state.pullUpHide)||((new Date).getTime()-o.time<20?Math.abs(a/l)>.8&&(o.touchX=0,o.touchY=0,o.time=0,o.state.move=!1,o.setState({move:!1})):o.setState({translateY:.3*l}),e.preventDefault())}},o.touchEndHandle=function(e){if(o.state.move){var t=e.changedTouches[0],n=t.clientY-o.touchY;if(0!==n){o.touchX=0,o.touchY=0,o.time=0,o.state.move=!1;var r=o.state,i=r.translateY,a=r.pullUpHide,l=r.pullDownStatus,A=r.pullUpStatus,u=o.props,s=u.pullDownRefresh,c=u.pullUpLoad,p=u.noMore;if("pullDown"===o.type){if(0!==l)return void o.setState({translateY:o.pullDownDoneBacking?0:40});!s||i<=40?o.setState({move:!1,translateY:0}):o.pullDownRefresh()}else"pullUp"===o.type&&(o.setState({move:!1,translateY:0}),c&&!a&&!p&&1!==A&&n<0&&o.pullUpLoad());o.type=""}}},o.pullDownRefresh=function(){var e=r(u.default.mark(function e(t){var n,r;return u.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(n=o.props.pullDownRefresh,t){e.next=7;break}if(n){e.next=4;break}return e.abrupt("return");case 4:t=n,e.next=9;break;case 7:r=t,t=function(){return Promise.all([r(),C(300)])};case 9:return o.setState({move:!1,translateY:40,pullDownStatus:1}),e.prev=10,e.next=13,t();case 13:o.setState({pullDownStatus:2}),e.next=19;break;case 16:e.prev=16,e.t0=e.catch(10),o.setState({pullDownStatus:3});case 19:return e.next=21,C(500);case 21:return o.setState({translateY:0}),o.pullDownDoneBacking=!0,e.next=25,C(300);case 25:o.setState({pullDownStatus:0}),o.state.pullDownStatus=0,o.pullDownDoneBacking=!1;case 28:case"end":return e.stop()}},e,A,[[10,16]])}));return function(t){return e.apply(this,arguments)}}(),o.pullUpLoad=r(u.default.mark(function e(){var t;return u.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=o.props.pullUpLoad,o.setState({pullUpStatus:1}),o.state.pullUpStatus=1,e.prev=3,e.next=6,t();case 6:o.setState({pullUpStatus:2}),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(3),o.setState({pullUpStatus:3});case 12:case"end":return e.stop()}},e,A,[[3,9]])})),o.backTop=function(){var e=o.wrapperEl.scrollTop,t=e/15,n=setInterval(function(){o.wrapperEl.scrollTop>=t?o.wrapperEl.scrollTop-=t:(o.wrapperEl.scrollTop=0,clearInterval(n))},20)},l=n,a(o,l)}return l(t,e),s(t,[{key:"componentDidMount",value:function(){this.setState({pullUpHide:this.innerEl.clientHeight60?180:0)+"deg)"}}),p.default.createElement("span",null,o>60?"释放":"下拉","刷新"))),p.default.createElement("div",{ref:function(t){return e.innerEl=t}},f),!i&&E&&p.default.createElement("div",{className:g.default.pullUpTip},C?d:0===l||1===l?p.default.createElement("div",null,p.default.createElement("img",{className:g.default.loading,src:n(2)}),p.default.createElement("span",null,"加载中")):2===l?p.default.createElement("div",null,p.default.createElement("img",{src:n(3)}),p.default.createElement("span",null,"加载成功")):3===l?p.default.createElement("div",null,p.default.createElement("img",{src:n(4)}),p.default.createElement("span",null,"加载失败")):""))),p.default.createElement(I.default,{icon:"boolean"!=typeof S&&S,visible:A,onBack:this.backTop}))}}]),t}(c.Component);S.defaultProps={noMore:!1,pullDownRefresh:null,pullUpLoad:null,backTop:!1,noMoreTip:"我是有底线的"},t.default=S},function(e,t){e.exports=require("babel-runtime/regenerator")},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var A=function(){function e(e,t){for(var n=0;n=0&&d.splice(t,1)}function l(e){var t=document.createElement("style");return e.attrs.type="text/css",u(t,e.attrs),i(e,t),t}function A(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",u(t,e.attrs),i(e,t),t}function u(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function s(e,t){var n,o,r,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var u=S++;n=C||(C=l(t)),o=c.bind(null,n,u,!1),r=c.bind(null,n,u,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=A(t),o=E.bind(null,n,t),r=function(){a(n),n.href&&URL.revokeObjectURL(n.href)}):(n=l(t),o=p.bind(null,n),r=function(){a(n)});return o(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;o(e=t)}else r()}}function c(e,t,n,o){var r=n?"":o.css;if(e.styleSheet)e.styleSheet.cssText=Q(t,r);else{var i=document.createTextNode(r),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(i,a[t]):e.appendChild(i)}}function p(e,t){var n=t.css,o=t.media;if(o&&e.setAttribute("media",o),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}function E(e,t,n){var o=n.css,r=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&r;(t.convertToAbsoluteUrls||i)&&(o=h(o)),r&&(o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */");var a=new Blob([o],{type:"text/css"}),l=e.href;e.href=URL.createObjectURL(a),l&&URL.revokeObjectURL(l)}var I={},f=function(e){var t;return function(){return void 0===t&&(t=e.apply(this,arguments)),t}}(function(){return window&&document&&document.all&&!window.atob}),g=function(e){var t={};return function(n){if(void 0===t[n]){var o=e.call(this,n);if(o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[n]=o}return t[n]}}(function(e){return document.querySelector(e)}),C=null,S=0,d=[],h=n(11);e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");t=t||{},t.attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=f()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=r(e,t);return o(n,t),function(e){for(var i=[],a=0;aReact App
-------------------------------------------------------------------------------- /example/build/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": "./index.html", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /example/build/service-worker.js: -------------------------------------------------------------------------------- 1 | "use strict";var precacheConfig=[["./index.html","b8a2b7b165663cabc14050e0f6fbbecc"],["./static/css/main.f8ccf616.css","05be949a2a4ecca6ebba9b914a81790a"],["./static/js/main.cfdfafeb.js","15dd476d5f6c17e019aa62aa0176eb05"]],cacheName="sw-precache-v3-sw-precache-webpack-plugin-"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(t){return t.redirected?("body"in t?Promise.resolve(t.body):t.blob()).then(function(e){return new Response(e,{headers:t.headers,status:t.status,statusText:t.statusText})}):Promise.resolve(t)},createCacheKey=function(e,t,n,r){var a=new URL(e);return r&&a.pathname.match(r)||(a.search+=(a.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),a.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,n){var t=new URL(e);return t.hash="",t.search=t.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(t){return n.every(function(e){return!e.test(t[0])})}).map(function(e){return e.join("=")}).join("&"),t.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],r=new URL(t,self.location),a=createCacheKey(r,hashParamName,n,/\.\w{8}\./);return[r.toString(),a]}));function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(r){return setOfCachedUrls(r).then(function(n){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(t){if(!n.has(t)){var e=new Request(t,{credentials:"same-origin"});return fetch(e).then(function(e){if(!e.ok)throw new Error("Request for "+t+" returned a response with status "+e.status);return cleanResponse(e).then(function(e){return r.put(t,e)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var n=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(t){return t.keys().then(function(e){return Promise.all(e.map(function(e){if(!n.has(e.url))return t.delete(e)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(t){if("GET"===t.request.method){var e,n=stripIgnoredUrlParameters(t.request.url,ignoreUrlParametersMatching),r="index.html";(e=urlsToCacheKeys.has(n))||(n=addDirectoryIndex(n,r),e=urlsToCacheKeys.has(n));var a="./index.html";!e&&"navigate"===t.request.mode&&isPathWhitelisted(["^(?!\\/__).*"],t.request.url)&&(n=new URL(a,self.location).toString(),e=urlsToCacheKeys.has(n)),e&&t.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(e){return console.warn('Couldn\'t serve response for "%s" from cache: %O',t.request.url,e),fetch(t.request)}))}}); -------------------------------------------------------------------------------- /example/build/static/css/main.f8ccf616.css: -------------------------------------------------------------------------------- 1 | body{margin:0;padding:0;font-family:sans-serif}body{background:#f5f5f5}ul{background:#fff;margin:0;padding:0}li{padding:0 20px;list-style:none;line-height:80px;height:80px} 2 | /*# sourceMappingURL=main.f8ccf616.css.map*/ -------------------------------------------------------------------------------- /example/build/static/css/main.f8ccf616.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["index.css","App.css"],"names":[],"mappings":"AAAA,KACE,SACA,UACA,sBAAwB,CCH1B,KACE,kBAAoB,CAGtB,GACE,gBACA,SACA,SAAU,CAEZ,GACE,eACA,gBACA,iBACA,WAAa","file":"static/css/main.f8ccf616.css","sourcesContent":["body {\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.css","body{\n background: #f5f5f5;\n}\n\nul{\n background: #fff;\n margin: 0;\n padding: 0\n}\nli{\n padding: 0 20px;\n list-style: none;\n line-height: 80px;\n height: 80px;\n}\n\n\n// WEBPACK FOOTER //\n// ./src/App.css"],"sourceRoot":""} -------------------------------------------------------------------------------- /example/config/env.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const fs = require('fs'); 4 | const path = require('path'); 5 | const paths = require('./paths'); 6 | 7 | // Make sure that including paths.js after env.js will read .env variables. 8 | delete require.cache[require.resolve('./paths')]; 9 | 10 | const NODE_ENV = process.env.NODE_ENV; 11 | if (!NODE_ENV) { 12 | throw new Error( 13 | 'The NODE_ENV environment variable is required but was not specified.' 14 | ); 15 | } 16 | 17 | // https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use 18 | var dotenvFiles = [ 19 | `${paths.dotenv}.${NODE_ENV}.local`, 20 | `${paths.dotenv}.${NODE_ENV}`, 21 | // Don't include `.env.local` for `test` environment 22 | // since normally you expect tests to produce the same 23 | // results for everyone 24 | NODE_ENV !== 'test' && `${paths.dotenv}.local`, 25 | paths.dotenv, 26 | ].filter(Boolean); 27 | 28 | // Load environment variables from .env* files. Suppress warnings using silent 29 | // if this file is missing. dotenv will never modify any environment variables 30 | // that have already been set. Variable expansion is supported in .env files. 31 | // https://github.com/motdotla/dotenv 32 | // https://github.com/motdotla/dotenv-expand 33 | dotenvFiles.forEach(dotenvFile => { 34 | if (fs.existsSync(dotenvFile)) { 35 | require('dotenv-expand')( 36 | require('dotenv').config({ 37 | path: dotenvFile, 38 | }) 39 | ); 40 | } 41 | }); 42 | 43 | // We support resolving modules according to `NODE_PATH`. 44 | // This lets you use absolute paths in imports inside large monorepos: 45 | // https://github.com/facebookincubator/create-react-app/issues/253. 46 | // It works similar to `NODE_PATH` in Node itself: 47 | // https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders 48 | // Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored. 49 | // Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims. 50 | // https://github.com/facebookincubator/create-react-app/issues/1023#issuecomment-265344421 51 | // We also resolve them to make sure all tools using them work consistently. 52 | const appDirectory = fs.realpathSync(process.cwd()); 53 | process.env.NODE_PATH = (process.env.NODE_PATH || '') 54 | .split(path.delimiter) 55 | .filter(folder => folder && !path.isAbsolute(folder)) 56 | .map(folder => path.resolve(appDirectory, folder)) 57 | .join(path.delimiter); 58 | 59 | // Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be 60 | // injected into the application via DefinePlugin in Webpack configuration. 61 | const REACT_APP = /^REACT_APP_/i; 62 | 63 | function getClientEnvironment(publicUrl) { 64 | const raw = Object.keys(process.env) 65 | .filter(key => REACT_APP.test(key)) 66 | .reduce( 67 | (env, key) => { 68 | env[key] = process.env[key]; 69 | return env; 70 | }, 71 | { 72 | // Useful for determining whether we’re running in production mode. 73 | // Most importantly, it switches React into the correct mode. 74 | NODE_ENV: process.env.NODE_ENV || 'development', 75 | // Useful for resolving the correct path to static assets in `public`. 76 | // For example, . 77 | // This should only be used as an escape hatch. Normally you would put 78 | // images into the `src` and `import` them in code to get their paths. 79 | PUBLIC_URL: publicUrl, 80 | } 81 | ); 82 | // Stringify all values so we can feed into Webpack DefinePlugin 83 | const stringified = { 84 | 'process.env': Object.keys(raw).reduce((env, key) => { 85 | env[key] = JSON.stringify(raw[key]); 86 | return env; 87 | }, {}), 88 | }; 89 | 90 | return { raw, stringified }; 91 | } 92 | 93 | module.exports = getClientEnvironment; 94 | -------------------------------------------------------------------------------- /example/config/jest/cssTransform.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // This is a custom Jest transformer turning style imports into empty objects. 4 | // http://facebook.github.io/jest/docs/en/webpack.html 5 | 6 | module.exports = { 7 | process() { 8 | return 'module.exports = {};'; 9 | }, 10 | getCacheKey() { 11 | // The output is always the same. 12 | return 'cssTransform'; 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /example/config/jest/fileTransform.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const path = require('path'); 4 | 5 | // This is a custom Jest transformer turning file imports into filenames. 6 | // http://facebook.github.io/jest/docs/en/webpack.html 7 | 8 | module.exports = { 9 | process(src, filename) { 10 | return `module.exports = ${JSON.stringify(path.basename(filename))};`; 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /example/config/paths.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const path = require('path'); 4 | const fs = require('fs'); 5 | const url = require('url'); 6 | 7 | // Make sure any symlinks in the project folder are resolved: 8 | // https://github.com/facebookincubator/create-react-app/issues/637 9 | const appDirectory = fs.realpathSync(process.cwd()); 10 | const resolveApp = relativePath => path.resolve(appDirectory, relativePath); 11 | 12 | const envPublicUrl = process.env.PUBLIC_URL; 13 | 14 | function ensureSlash(path, needsSlash) { 15 | const hasSlash = path.endsWith('/'); 16 | if (hasSlash && !needsSlash) { 17 | return path.substr(path, path.length - 1); 18 | } else if (!hasSlash && needsSlash) { 19 | return `${path}/`; 20 | } else { 21 | return path; 22 | } 23 | } 24 | 25 | const getPublicUrl = appPackageJson => 26 | envPublicUrl || require(appPackageJson).homepage; 27 | 28 | // We use `PUBLIC_URL` environment variable or "homepage" field to infer 29 | // "public path" at which the app is served. 30 | // Webpack needs to know it to put the right