<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>alex1504 (Zerui Hu)</title>
    <link>https://ruby-china.org/alex1504</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>基于 React 构建的简易精美的 FM 分享</title>
      <description>&lt;h2 id="PetalFM"&gt;PetalFM&lt;/h2&gt;
&lt;p&gt;基于 react 构建的简易精美的 FM&lt;/p&gt;

&lt;p&gt;&lt;a href="https://facebook.github.io/react/" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://img.shields.io/badge/react-v16.2.0-blue.svg?longCache=true" title="" alt="react"&gt;&lt;/a&gt;
&lt;a href="https://reacttraining.com/react-router/" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://img.shields.io/badge/react--router-v4.2.2-blue.svg?longCache=true" title="" alt="react-router"&gt;&lt;/a&gt;
&lt;a href="http://standardjs.com/" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat" title="" alt="js-standard-style"&gt;&lt;/a&gt;
&lt;a href="https://david-dm.org/alex1504/PetalFM" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://david-dm.org/alex1504/PetalFM/status.svg" title="" alt="Dependency Status"&gt;&lt;/a&gt;
&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat" title="" alt="MIT Licensed"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="预览"&gt;预览&lt;/h2&gt;
&lt;p&gt;以下预览图截取环境是 iPhone8P 微信内置浏览器&lt;/p&gt;

&lt;p&gt;&lt;img src="https://github.com/alex1504/PetalFM/raw/master/media/preview_1.jpg" title="" alt="preview"&gt;
&lt;img src="https://github.com/alex1504/PetalFM/raw/master/media/preview_2.jpg" title="" alt="preview"&gt;
&lt;img src="https://github.com/alex1504/PetalFM/raw/master/media/preview_3.jpg" title="" alt="preview"&gt;
&lt;img src="https://github.com/alex1504/PetalFM/raw/master/media/preview_4.jpg" title="" alt="preview"&gt;&lt;/p&gt;
&lt;h3 id="项目地址"&gt;项目地址&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/alex1504/PetalFM" rel="nofollow" target="_blank" title=""&gt;https://github.com/alex1504/PetalFM&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="在线地址"&gt;在线地址&lt;/h3&gt;
&lt;p&gt;访问 &lt;a href="http://fm.huzerui.com/" rel="nofollow" target="_blank"&gt;http://fm.huzerui.com/&lt;/a&gt;, 更好的体验效果请在移动端体验，扫描下面二维码。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://github.com/alex1504/PetalFM/raw/master/media/qrcode.png" title="" alt="qrcode"&gt;&lt;/p&gt;
&lt;h3 id="测试账号"&gt;测试账号&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;用户名：petalFM&lt;/li&gt;
&lt;li&gt;密码：petalFM&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="技术栈"&gt;技术栈&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://github.com/alex1504/PetalFM/raw/master/media/main-based-on.png" title="" alt="based on"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Framework: &lt;a href="https://facebook.github.io/react/" rel="nofollow" target="_blank" title=""&gt;react&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; State Management: &lt;a href="https://redux.js.org/" rel="nofollow" target="_blank" title=""&gt;redux&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Bundler: &lt;a href="http://webpack.github.io/docs/" rel="nofollow" target="_blank" title=""&gt;Webpack&lt;/a&gt;，&lt;a href="https://babeljs.io" rel="nofollow" target="_blank" title=""&gt;Babel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Language: &lt;a href="https://babeljs.io/docs/learn-es2015/" rel="nofollow" target="_blank" title=""&gt;ES2015&lt;/a&gt;, &lt;a href="http://lesscss.org/" rel="nofollow" target="_blank" title=""&gt;Less&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Library:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://reacttraining.com/react-router/" rel="nofollow" target="_blank" title=""&gt;React Router V4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://material-ui-next.com/" rel="nofollow" target="_blank" title=""&gt;Material-UI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Lint: &lt;a href="http://eslint.org/" rel="nofollow" target="_blank" title=""&gt;ESLint&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Icon Support: &lt;a href="http://www.iconfont.cn" rel="nofollow" target="_blank" title=""&gt;Iconfont&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="特点"&gt;特点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;材质设计风格界面。主色调为粉色色调。&lt;/li&gt;
&lt;li&gt;使用 Leancloud 提供数据服务。&lt;/li&gt;
&lt;li&gt;专属 FM 和心动 FM 定制&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="功能"&gt;功能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[x] 登录、注册和注销&lt;/li&gt;
&lt;li&gt;[x] 定制个人偏好标签&lt;/li&gt;
&lt;li&gt;[x] 精选调频，私人调频，红心调频频道选择&lt;/li&gt;
&lt;li&gt;[x] 搜索歌曲，收集歌曲，下载歌曲&lt;/li&gt;
&lt;li&gt;[x] 将歌曲添加到垃圾箱或从中回收歌曲&lt;/li&gt;
&lt;li&gt;[] 个人配置、话题切换等。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="项目目录说明"&gt;项目目录说明&lt;/h2&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
|-- config                           // webpack配置目录
|-- database                         // 数据库备份目录
|-- media                            // readme描述资源
|-- src                              // 源码目录
|   |-- components                   // 公共组件
|   |-- pages                        // 页面组件
|       |-- Login                    // 登陆页面
|       |-- Guide                    // 标签定制页
|       |-- Index                    // 主页
|       |-- Search                   // 搜索页
|       |-- Admin                    // 后台数据录入页（仅管理员可见）
|       |-- Dislike                  // 用户不兴趣歌曲页
|   |-- router                       // 路由定义
|   |-- services                     // 后端服务目录
|       |-- avinit.js                // leancloudSDK初始化
|       |-- config.js                // 数据库相关配置
|       |-- songServices.js          // 歌曲相关服务
|       |-- userServices.js          // 用户相关服务
|       |-- index.js                 // 后端数据库服务入口
|   |-- store                        // 状态管理目录
|       |-- index.js                 // 加载各种store模块
|       |-- types                    // 定义触发状态改变类型
|       |-- reducers                 // 状态生成器
|   |-- Utils                        // 工具函数
|   |-- index.js                     // 程序入口文件
|-- .gitignore                       // Git提交忽略文件规则
|-- LICENSE                          // 授权协议
|-- README.md                        // 项目说明
|-- package.json                     // 配置项目相关信息
.
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="本地运行或二次开发"&gt;本地运行或二次开发&lt;/h2&gt;
&lt;p&gt;由于后端云开启了 WEB 安全域名，本地克隆项目后无法直接运行，解决方式如下：&lt;/p&gt;

&lt;p&gt;前置工作：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step1：执行命令克隆项目到本地&lt;code&gt;git clone https://github.com/alex1504/PetalFM.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Step2：安装依赖 &lt;code&gt;npm install&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Step3：在 &lt;a href="https://leancloud.cn/" rel="nofollow" target="_blank" title=""&gt;https://leancloud.cn/&lt;/a&gt; 注册账号并且在后台创建一个 leancloud 应用&lt;/li&gt;
&lt;li&gt;Step4：在 leancloud 应用后台导入根目录 database 下面的数据库，并且在&lt;u&gt;User 表创建你的管理员账号（用户名和密码需为 4-8 位的数字、字母或&lt;/u&gt;）&lt;/li&gt;
&lt;li&gt;Step5：修改 &lt;code&gt;/src/services/config.js&lt;/code&gt;配置如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;APP_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR APP_ID FOUND IN LEANCLOUD APP SETTING&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;APP_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR APP_KEY FOUND IN LEANCLOUD APP SETTING&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SUPER_USER_OBJECT_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR SUPERUSER ACCOUNT OBJECT ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只有管理员才能看到 Admin 入口并且通过搜索接口录入歌曲，并设置歌曲所属类别。&lt;/p&gt;

&lt;p&gt;开发：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step6：执行 &lt;code&gt;npm run dev&lt;/code&gt;运行项目&lt;/li&gt;
&lt;li&gt;Step7：执行 &lt;code&gt;npm run build&lt;/code&gt;打包项目，&lt;code&gt;/dist/&lt;/code&gt;文件夹为打包后的项目文件&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;部署：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step9：在开发过程中，webpack-dev-server 将本地 &lt;code&gt;/api/&lt;/code&gt;请求转发到&lt;code&gt;http://music.163.com/api&lt;/code&gt;（若需增加别的转发机制请修改 package.json 中的 proxy 配置，完整配置参考&lt;a href="https://github.com/nodejitsu/node-http-proxy#options" rel="nofollow" target="_blank" title=""&gt;http-proxy&lt;/a&gt;），因此部署到服务器时请借助 nginx 或 nodejs 服务器进行接口转发，否则搜索和录入服务不生效。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="更多"&gt;更多&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;反馈问题：&lt;a href="https://github.com/alex1504/petalFM/issues/new" rel="nofollow" target="_blank" title=""&gt;新建&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;联系：邮件至：&lt;a href="mailto:me@huzerui.com"&gt;me@huzerui.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="协议"&gt;协议&lt;/h2&gt;
&lt;p&gt;MIT © &lt;a href="https://github.com/alex1504" rel="nofollow" target="_blank" title=""&gt;alex1504&lt;/a&gt;&lt;/p&gt;</description>
      <author>alex1504</author>
      <pubDate>Fri, 04 May 2018 09:32:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/36676</link>
      <guid>https://ruby-china.org/topics/36676</guid>
    </item>
  </channel>
</rss>
