{"id":28540760,"url":"https://github.com/leecade/fe","last_synced_at":"2025-07-07T11:31:03.030Z","repository":{"id":4693027,"uuid":"5840002","full_name":"leecade/fe","owner":"leecade","description":":dog: Provide Font-End 2017 Tech Stack and standalone build environment","archived":false,"fork":false,"pushed_at":"2020-06-01T01:17:09.000Z","size":9006,"stargazers_count":15,"open_issues_count":106,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-09T19:49:29.711Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leecade.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-MIT","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-09-17T11:24:10.000Z","updated_at":"2023-11-03T17:09:51.000Z","dependencies_parsed_at":"2022-07-22T05:48:11.431Z","dependency_job_id":null,"html_url":"https://github.com/leecade/fe","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/leecade/fe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leecade%2Ffe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leecade%2Ffe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leecade%2Ffe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leecade%2Ffe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leecade","download_url":"https://codeload.github.com/leecade/fe/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leecade%2Ffe/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264069125,"owners_count":23552546,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-09T19:37:12.160Z","updated_at":"2025-07-07T11:31:03.017Z","avatar_url":"https://github.com/leecade.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://en.wikipedia.org/wiki/Golden_Retriever\"\u003e\n    \u003cimg alt=\"FE\" src=\"https://gitlab.pro/react/fe/uploads/d32494d5a97e1be002e933a256ccecc1/logo.png\" width=\"586\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/leecade/fe\"\u003e\u003cimg alt=\"FE Stack\" src=\"https://img.shields.io/badge/FE-Stack-blue.svg?style=flat-square\u0026colorA=333\u0026colorB=4A90E2\"\u003e\u003c/a\u003e\n  \u003ca href=\"http://standardjs.com/\"\u003e\u003cimg alt=\"JavaScript Style Guide\" src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://npmjs.org/package/fe\"\u003e\u003cimg alt=\"npm version\" src=\"http://img.shields.io/npm/v/fe.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://npmjs.org/package/fe\"\u003e\u003cimg alt=\"npm version\" src=\"http://img.shields.io/npm/dm/fe.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://circleci.com/gh/leecade/fe\"\u003e\u003cimg alt=\"Circleci\" src=\"https://img.shields.io/circleci/token/72d6756394f8489fe6d870e3fb71f2f3658a3518/project/github/leecade/fe/master.svg?style=flat-square\u0026label=build\u0026logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y%2BmAAAAdVBMVEUAAAC7u7upqam4uLi7u7uysrK6urq6urq7u7u6urq7u7u7u7u6urq5ubm3t7e7u7u7u7u7u7u6urq5ubm2tra7u7u7u7u7u7u6urq5ubm6urq4uLi7u7u6urq7u7u7u7u1tbW6urq6urq6urq7u7u6urq7u7uZ6jesAAAAJnRSTlMA%2BAke5xPwbbZ%2FdWZSLij0r51eNA7p2b6cTTwZ39TERRamklXKl9fT8SUAAAD3SURBVCjPhZPrGoIgDIYHAmKgZZppdrAT93%2BJoWuF6ZPvr08%2BGRsb8IEXZs9EbiOYECUnhyh95yOLr4QLOB8Cr9u4Mev447UPNyGhmHs3g0EzcYQ4VWvSKu29jL6vF8l5FlcO0b2Zo1YWEHnFBeZTbhXK5lvXO%2FcawKK69ctlkQ0XshuWjiW0JvYY6RcvlWObXtwwWAoEbci9ajBaE5hbLMdvTdkgt0vmNKylsNFqoA0Tqt8J0V95UEqmqJQOi2J4QNiI2usnSmboaE3XF168tlEpi0TQ50%2FL1FGwccuA6z%2FNhu48NyaEnB8wIp6O5vJQj59DHT6HF7O7OuRQVm7zAAAAAElFTkSuQmCC\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://ci.appveyor.com/project/leecade/fe\"\u003e\u003cimg alt=\"Appveyor\" src=\"https://img.shields.io/appveyor/ci/leecade/fe.svg?style=flat-square\u0026logo=data%3Aimage%2Fsvg%2Bxml%2C%3Csvg+xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27+width%3D%2740%27+height%3D%2740%27+viewBox%3D%270+0+40+40%27%3E%3Cpath+fill%3D%27%23BBB%27+d%3D%27M20+0c11+0+20+9+20+20s-9+20-20+20S0+31+0+20+9+0+20+0zm4.9+23.9c2.2-2.8+1.9-6.8-.9-8.9-2.7-2.1-6.7-1.6-9+1.2-2.2+2.8-1.9+6.8.9+8.9+2.8+2.1+6.8+1.6+9-1.2zm-10.7+13c1.2.5+3.8+1+5.1+1L28+25.3c2.8-4.2+2.1-9.9-1.8-13-3.5-2.8-8.4-2.7-11.9+0L2.2+21.6c.3+3.2+1.2+4.8+1.2+4.9l6.9-7.5c-.5+3.3.7+6.7+3.5+8.8+2.4+1.9+5.3+2.4+8.1+1.8l-7.7+7.3z%27%2F%3E%3C%2Fsvg%3E\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://coveralls.io/github/leecade/fe\"\u003e\u003cimg alt=\"Coveralls\" src=\"https://img.shields.io/coveralls/leecade/fe.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003c!-- \u003ca href=\"LICENSE-MIT\"\u003e\u003cimg alt=\"LICENSE-MIT\" src=\"https://img.shields.io/npm/l/fe.svg?style=flat-square\"\u003e\u003c/a\u003e --\u003e\n  \u003ca href=\"https://fe-stack.slack.com/\"\u003e\u003cimg alt=\"Slack\" src=\"https://img.shields.io/badge/slack-3/8-pink.svg?style=flat-square\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e LOGO meaning: The [golden retriever](https://en.wikipedia.org/wiki/Golden_Retriever) is a professional guard dog with a gentle temperament, strong, very smart and friendly to their caregivers.\n\n----\n\n## NEW PLAN\n\n`0.1.x` [DEPRECATED](https://github.com/leecade/fe/tree/master)\n\n\u003e You can review the old project [here](https://github.com/leecade/fe/tree/master) and `npm i fe -g` still works.\n\n`1.0` [WIP](https://github.com/leecade/fe/milestone/1)\n\n\u003e Refactor for better engineering and new techs such as SSR.\n\n### BETA VERSION CHANGELOG\n\n- [0.1.21]\n  + [Improve] Add auto publish hook\n\n- [0.1.20]\n  + [default config] Change default public path to `/` to fix bundle url error in child-routing + browser router\n  + [Bug] Fixes default behavior of touch to avoid `undefined` content\n  + [Install script] Improve double refresh environment variable\n\n## Developer Guide\n\n```sh\n$ git clone\n$ yarn # or npm i\n$ yarn dev\n$ npm link # you got the global `fe`\n```\n\nrelease\n\n```sh\n$ npm run build\n$ npm version patch -m \"bump version\"\n$ npm publish # auto bump version\n# build the release pkg\n$ yarn release # change the tar download url if you have another one\n```\n\n----\n\n# FE Stack\n\n![screenshot](https://gitlab.pro/react/fe/uploads/1493f976f411e120f0ce77fb0a878e6c/image.png)\n\n## Motivation\n\nTODO\n\n## Install\n\nDepends on\n\n - node 4+\n - npm 3+\n\n### *nix(OSX / Debian / Centos ...)\n\n```\ncurl https://raw.githubusercontent.com/leecade/fe/master/scripts/install.sh -L -o - | sh\n```\n\n\u003e Recommend Chinese users\n\n### General install through node\n\n```\nnpm install fe -g\n```\n\n### OSX\n\nTODO\n\n```\n$ brew install fe\n```\n\n\u003e use `curl https://raw.githubusercontent.com/leecade/fe/master/scripts/install.sh -L -o - | sh` fallback first\n\n### Windows\n\nTODO\n\n\u003e use `npm i -g fe` fallback first\n\n## Get started\n\n### The quickly and manual way\n\nJust create a json file named `fe.config.json`(labeling the root location of your project)\n\n```sh\n$ touch fe.config.json\n```\n\nThat's all that matters, now let's get started:\n\n```sh\n$ fe d # alias `fe dev`\n```\n\n\u003e Type Enter if requested to generate entry file\n\nNow that we are in dev mode, you may edit the `src/index.js` with liveload supports.\n\nNext, we initialize React environment:\n\n```sh\n$ npm init -y\n$ npm i react react-dom -S\n```\n\nFollowing the [react tutorial](https://facebook.github.io/react/), we put some code in `src/index.js`\n\n```jsx\nimport React, { Component } from 'react'\nimport { render } from 'react-dom'\nclass HelloMessage extends Component {\n  state = {\n    name: 'FE Stack'\n  }\n  render() {\n    return \u003cdiv\u003eHello {this.state.name}\u003c/div\u003e\n  }\n}\nrender(\u003cHelloMessage name=\"Jane\" /\u003e, document.getElementById('root'))\n```\n\nGreat! It works. Next Step: we fetch some mock data:\n\n```sh\n$ mkdir -p mock/TaskList\n$ touch mock/TaskList/index.js\n```\n\nPut the following code in `mock/TaskList/index.js`:\n\n```js\nmodule.exports = [{\n  method: 'GET',\n  route: '/task-list',\n  handler: {\n    \"data\": [{\n      \"name\": \"task1\"\n    }, {\n      \"name\": \"task2\"\n    }]\n  }\n}]\n```\n\nThen restart `fe d` and update `src/index.js`:\n\n```jsx\nimport React, { Component } from 'react'\nimport { render } from 'react-dom'\nclass HelloMessage extends Component {\n  state = {\n    name: 'FE Stack',\n    mockData: ''\n  }\n  componentDidMount () {\n    fetch('/api/task-list')\n        .then(res =\u003e res.json())\n        .then(mockData =\u003e this.setState(Object.assign({}, this.state, { mockData })))\n  }\n  render() {\n    return \u003cdiv\u003eHello {this.state.name}, {JSON.stringify(this.state.mockData)}\u003c/div\u003e\n  }\n}\nrender(\u003cHelloMessage name=\"Jane\" /\u003e, document.getElementById('root'))\n```\n\n\u003e See [src/config/default.js](src/config/default.js) for more information about `fe.config.json`\n\n```json\n{\n  \"TITLE\": \"PAGE_TITLE\",\n  \"HOST\": \"localhost\",\n  \"HTTPS\": false,\n  \"DEV_SERVER_PORT\": 3000,\n  \"MOCK_PREFIX\": \"/_mock\",\n  \"PROXY\": {\n    \"/api\": {\n      \"target\": \"http://localhost:3000/\",\n      \"pathRewrite\": {\"^/api\": \"/_mock\"}\n    }\n  },\n  \"inChina\": true,\n  \"FE_CONFIG_FILE\": \"fe.config.json\",\n  \"BUILD_DIR\": \"build\",\n  \"CONFIG_DIR\": \"config\",\n  \"MOCK_DIR\": \"mock\",\n  \"PUBLIC_DIR\": \"public\",\n  \"SRC_DIR\": \"src\",\n  \"EMPTY_FILE\": \"config/empty.js\",\n  \"TEMPLATE_FILE\": \"config/template.ejs\",\n  \"ENTRY_FILE\": \"src/index.js\",\n  \"POLYFILLS_FILE\": \"config/polyfills.js\",\n  \"HTML_FILE\": \"public/index.html\",\n  \"TEST_SETUP_FILE\": \"config/setupTests.js\",\n  \"publicPath\": \"\"\n}\n```\n\n### The right and concise way\n\n```sh\n$ fe init mydemo\n```\n\n## Ecosystem ![FE Stack](https://img.shields.io/badge/FE-Stack-blue.svg?style=flat-square\u0026colorA=333\u0026colorB=4A90E2)\n\n```sh\n$ fe list\n```\n\n### Available official [components](https://github.com/fe-components)\n\n| component name        | description  |\n| ------------- |:-------------|\n| [fe-reset](https://github.com/fe-components/fe-reset) | CSS reset implementation in FE stack |\n| [fe-datepicker](https://github.com/fe-components/fe-datepicker) | |\n| [fe-upload](https://github.com/fe-components/fe-upload) |  |\n| [fe-table](https://github.com/fe-components/fe-table) |  |\n| [fe-pagination](https://github.com/fe-components/fe-pagination) | |\n| [fe-input](https://github.com/fe-components/fe-input) | |\n| [fe-select](https://github.com/fe-components/fe-select) | |\n| [fe-form](https://github.com/fe-components/fe-form) | |\n| [fe-modal](https://github.com/fe-components/fe-modal) | |\n| [fe-button](https://github.com/fe-components/fe-button) | |\n\n### Available official [boilerplates](https://github.com/fe-boilerplate)\n\n| boilerplat name        | description  |\n| ------------- |:-------------|\n| [basic](https://github.com/fe-boilerplate/basic) | A basic boilerplate |\n| [redux](https://github.com/fe-boilerplate/redux) | redux+route4+immutable |\n| [mobx](https://github.com/fe-boilerplate/mobx) | TODO |\n| [dva](https://github.com/fe-boilerplate/dva) | TODO |\n| [ant](https://github.com/fe-boilerplate/ant) | TODO |\n| [ant](https://github.com/fe-boilerplate/ant) | TODO |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleecade%2Ffe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleecade%2Ffe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleecade%2Ffe/lists"}