美文网首页react
creat-react-app+ant-mobile 项目结构搭

creat-react-app+ant-mobile 项目结构搭

作者: littlelights | 来源:发表于2017-06-14 14:54 被阅读0次

使用Facebook 官方推出Create-React-App脚手架搭建基于webpack的React开发环境

前言

使用Facebook 官方推出Create-React-App脚手架,搭建基于webpack2的React开发环境。本文需要有npm、webpack的基础知识。 版本 "antd-mobile": "^1.3.0", "react": "^15.6.0", "webpack": " 2.4.1"

传送门:
第一部分:概念 · webpack 中文文档(2.2)
npm scripts 使用指南 - 阮一峰的网络日志

参考资料链接:
Create-React-App创建antd-mobile开发环境 - 简书
在 create-react(-native)-app 中使用 - Ant Design

快速开始

npm install -g create-react-app  // 安装create-react-app

create-react-app myapp          // 创建应用,myapp 为项目名

cd myapp      

npm start                 // 启动项目

npm run eject             // 显示隐藏的webpack配置文件

引入 antd-mobile

首先从 yarn 或 npm 安装 antd-mobile 与开发依赖:
babel-plugin-import(一个用于按需加载组件代码和样式的 babel 插件(原理))
svg-sprite-loader需指定0.3.1版本,其他版本可能会造成svg无法显示
postcss-pxtorem ant-mobile高清配置方案

npm

npm install antd-mobile   //引入 antd-mobile

npm install --save--dev babel-plugin-import svg-sprite-loader@0.3.1 less less-loader postcss-pxtorem  // 安装开发依赖

yarn

yarn add antd-mobile

yarn add --dev babel-plugin-import svg-sprite-loader@0.3.1 less less-loader postcss-pxtorem

修改config 下的webpack.config.dev.js文件

这里以webpack.config.dev.js(开发环境) 举例,webpack.config.prod.js(生产环境) 一样配置即可:

  resolve:{
    ...
    extensions: ['.web.js', '.js', '.json', '.jsx'],
    ...
  }

rules: [
 exclude: [
           /\.html$/,
           /\.(js|jsx)$/,
           /\.css$/,
           /\.json$/,
           /\.bmp$/,
           /\.gif$/,
           /\.jpe?g$/,
           /\.png$/,
           /\.less$/,   //新增项
           /\.svg$/,    //新增项
         ],

 // Process JS with Babel.
  {
    test: /\.(js|jsx)$/,
    ...
    options: {
      plugins: [
        ['import', { libraryName: 'antd-mobile', style: true }],
      ],
      cacheDirectory: true,
    }
  },

{
    test: /\.(svg)$/i,
    loader: 'svg-sprite-loader',
    include: [
      require.resolve('antd-mobile').replace(/warn\.js$/, ''),  //  antd-mobile内置svg
      // path.resolve(__dirname, '../src/myAppSvg'),            // 使用自定义svg 
    ]
  },


  {
    test: /\.less$/,
    use: [
      require.resolve('style-loader'),
      require.resolve('css-loader'),
      {
        loader: require.resolve('postcss-loader'),
        options: {
          ident: 'postcss', // https://webpack.js.org/guides/migrating/#complex-options
          plugins: () => [
            autoprefixer({
              browsers: ['last 2 versions', 'Firefox ESR', '> 1%', 'ie >= 8', 'iOS >= 8', 'Android >= 4'],
            }),
             require('postcss-pxtorem')({ rootValue: 100, propWhiteList: [] })
          ],
        },
      },
      {
        loader: require.resolve('less-loader'),
        options: {
          modifyVars: { "@primary-color": "#1DA57A" },
        },
      },
    ],
  }

 ]

ant-mobile内置只有十几个svg图标,如果需要更多antd mobile svg素材:
ant-design/ant-design-icons: svg icons for ant-design-mobile

antd mobile高清方案设置

antd-mobile 需要的webpack配置上面已经配置过了,只需要在 myapp > public > index.html 文件头部加上如下代码即可:

<script>(function(baseFontSize,fontscale){var _baseFontSize=baseFontSize||100;var _fontscale=fontscale||1;var win=window;var doc=win.document;var ua=navigator.userAgent;var matches=ua.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i);var UCversion=ua.match(/U3\/((\d+|\.){5,})/i);var isUCHd=UCversion&&parseInt(UCversion[1].split('.').join(''),10)>=80;var isIos=navigator.appVersion.match(/(iphone|ipad|ipod)/gi);var dpr=win.devicePixelRatio||1;if(!isIos&&!(matches&&matches[1]>534)&&!isUCHd){dpr=1}var scale=1/dpr;var metaEl=doc.querySelector('meta[name="viewport"]');if(!metaEl){metaEl=doc.createElement('meta');metaEl.setAttribute('name','viewport');doc.head.appendChild(metaEl)}metaEl.setAttribute('content','width=device-width,user-scalable=no,initial-scale='+scale+',maximum-scale='+scale+',minimum-scale='+scale);doc.documentElement.style.fontSize=_baseFontSize/2*dpr*_fontscale+'px';window.viewportScale=dpr})();if(!window.Promise){document.writeln('<script src="https://as.alipayobjects.com/g/component/es6-promise/3.2.2/es6-promise.min.js"'+'>'+'<'+'/'+'script>')}</script>

参考链接:
ant design mobile 0.9.x 高清方案 webpack 配置 - 半桶水 - SegmentFault
antd mobile 0.8 以上版本「高清」方案设置 · ant-design/ant-design-mobile Wiki

试运行

未修改App.js文件直接运行时,会出现svg解析报错,忽略不管,使用antd mobile的Icon标签添加svg即可。
找到src下的App.js文件将其改成如下:

import React, { Component } from 'react';
import { NavBar, Icon } from 'antd-mobile';

class App extends Component {
  render() {
    return (
      <div className="App">
        <NavBar leftContent="back"
            mode="light"
            onLeftClick={() => console.log('onLeftClick')}
            rightContent={[
              <Icon key="0" type="search" style={{ marginRight: '0.32rem' }} />,
              <Icon key="1" type="ellipsis" />,
            ]}
        >NavBar</NavBar>
      </div>
    );
  }
}

export default App;

最后 npm start 运行~ 出现导航栏说明配置成功了

其他

最后放一下package.json 文件 以及src项目结构

src                                // 业务代码目录,或者叫 app
 |--actions                        // 定义 Redux 的各个 action
 |--components                     // 定义项目中的各个组件,里面可能有很多个子文件夹
 |--config                         // 项目配置,无具体规定,自由发挥
 |--constants                      // 定义 Redux 中用到的各个常量
 |--container                      // 定义项目中的所有的页面
 |--fetch                          // 定义项目中所有数据获取、提交的方法
 |--mysvg                          // 项目svg文件
 |--reducers                       // 定义 Redux 的 reducer 规则
 |--router                         // 定义项目中的 router 规则
 |--store                          // 定义 Redux 的全局 store 对象
 `--utils                          // 工具函数,例如时间格式的处理等

package.json

{
  "name": "myapp",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "antd-mobile": "^1.3.0",
    "react": "^15.6.0",
    "react-dom": "^15.6.0"
  },
  "devDependencies": {
    "autoprefixer": "7.1.0",
    "babel-core": "6.24.1",
    "babel-eslint": "7.2.3",
    "babel-jest": "20.0.3",
    "babel-loader": "7.0.0",
    "babel-plugin-import": "^1.2.1",
    "babel-preset-react-app": "^3.0.0",
    "babel-runtime": "6.23.0",
    "case-sensitive-paths-webpack-plugin": "1.1.4",
    "chalk": "1.1.3",
    "css-loader": "0.28.1",
    "dotenv": "4.0.0",
    "eslint": "3.19.0",
    "eslint-config-react-app": "^1.0.4",
    "eslint-loader": "1.7.1",
    "eslint-plugin-flowtype": "2.33.0",
    "eslint-plugin-import": "2.2.0",
    "eslint-plugin-jsx-a11y": "5.0.3",
    "eslint-plugin-react": "7.0.1",
    "extract-text-webpack-plugin": "2.1.0",
    "file-loader": "0.11.1",
    "fs-extra": "3.0.1",
    "html-webpack-plugin": "2.28.0",
    "jest": "20.0.3",
    "less": "^2.7.2",
    "less-loader": "^4.0.4",
    "object-assign": "4.1.1",
    "postcss-flexbugs-fixes": "3.0.0",
    "postcss-loader": "2.0.5",
    "postcss-pxtorem": "^4.0.1",
    "promise": "7.1.1",
    "react-dev-utils": "^3.0.0",
    "react-error-overlay": "^1.0.7",
    "style-loader": "0.17.0",
    "svg-sprite-loader": "0.3.1",
    "sw-precache-webpack-plugin": "0.9.1",
    "url-loader": "0.5.8",
    "webpack": "2.6.1",
    "webpack-dev-server": "2.4.5",
    "webpack-manifest-plugin": "1.1.0",
    "whatwg-fetch": "2.0.3"
  },
  "scripts": {
    "start": "node scripts/start.js",
    "build": "node scripts/build.js",
    "test": "node scripts/test.js --env=jsdom"
  },
  "jest": {
    "collectCoverageFrom": [
      "src/**/*.{js,jsx}"
    ],
    "setupFiles": [
      "<rootDir>/config/polyfills.js"
    ],
    "testMatch": [
      "<rootDir>/src/**/__tests__/**/*.js?(x)",
      "<rootDir>/src/**/?(*.)(spec|test).js?(x)"
    ],
    "testEnvironment": "node",
    "testURL": "http://localhost",
    "transform": {
      "^.+\\.(js|jsx)$": "<rootDir>/node_modules/babel-jest",
      "^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
      "^(?!.*\\.(js|jsx|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
    },
    "transformIgnorePatterns": [
      "[/\\\\]node_modules[/\\\\].+\\.(js|jsx)$"
    ],
    "moduleNameMapper": {
      "^react-native$": "react-native-web"
    }
  },
  "babel": {
    "presets": [
      "react-app"
    ]
  },
  "eslintConfig": {
    "extends": "react-app"
  }
}

相关文章

  • creat-react-app+ant-mobile 项目结构搭

    使用Facebook 官方推出Create-React-App脚手架搭建基于webpack的React开发环境 前...

  • 在vue-cli3中如何引入bootstrap和jquery

    之前在写我的个人博客,技术选型的时候博客页面选的是vue+bootstrap。用vue-cli3搭完项目结构后开始...

  • 微信小程序边学边记系列(3)

    项目结构:(分为全局结构和局部结构) 微信自动生成项目 ==>全局结构: 上述结构是微信小程序创建项目时,自动生成...

  • vue项目搭建及基本结构讲解

    vue实例的基本结构,有哪些配置属性方法? 在了解vue配置之前,我们首先要学会怎么创建一个vue项目,这里怎么搭...

  • 搭结构-行书写作微课

    导师:郭龙写作微课:搭结构 结构的价值 结构对于写作而言,不是锦上添花,而是最低配置 写作结构有哪些 功能结构基本...

  • PPP项目融资结构

    PPP项目融资主要考虑4个方面的结构性问题,分别是项目公司结构、项目融资结构、资金来源结构、信用增进结构。 1. ...

  • 😄Android--分析项目结构

    项目的形式 项目结构 app文件夹结构

  • 项目结构

    简单谈下目前我们现在项目的架构。首先拿其中一个模块举个栗子?: 我们针对任何一个模块开,都会创建这样的目录结构。下...

  • 项目结构

    原文链接:http://www.jetbrains.org/intellij/sdk/docs/basics/pr...

  • 项目结构

    # 项目结构 --- 我也要写一本iOS的书。 #开门一步 一个项目开始大约是什么样的哪。 不谈写项目需求分析,项...

网友评论

    本文标题:creat-react-app+ant-mobile 项目结构搭

    本文链接:https://www.haomeiwen.com/subject/tllsqxtx.html