antd-mobile环境搭建详细步骤以及遇到的坑

1、创建项目,这里使用dva新建项目

dva new YGAntdMobileDemo

2、安装antd-mobile

npm install antd-mobile --save

3、按需加载,安装babel-plugin-import

官网强烈推荐使用,可以提高打包的编译速度和浏览器下载资源的速度,babel-plugin-import 可以从组件库中仅仅引入需要的模块,而不是把整个库都引入,从而提高性能

npm install babel-plugin-import --save-dev

4、将原有的.roadhogrc文件修改为.roadhogrc.js,配置文件如下

import pxtorem from 'postcss-pxtorem';
const path = require( 'path' );


export default {
  entry : "src/index.js" ,
  disableCSSModules : true ,
  cssModulesExclude:[
    './src/index.css'
  ],
  publicPath : "/go-nifty/pp/app/index/" ,
  autoprefixer : {
    browsers : [
      "iOS >= 8" ,
      "Android >= 4"
    ]
  } ,
  extraPostCSSPlugins : [
    pxtorem( {
      rootValue : 100 ,
      propWhiteList : [] ,
    } ) ,
  ] ,
  extraBabelPlugins : [
    "transform-runtime" ,
    [
      "import" ,
      { libraryName : "antd-mobile" , "libraryDirectory" : "lib", "style": true }
    ]
  ] ,
  env : {
    development : {
      "extraBabelPlugins": [
        "dva-hmr",
        "transform-runtime"
      ]
    }
  }
};

以上代码段注意点:

1>、extraBabelPlugins节点下是组件按需加载主要配置项

注意:样式必须加载 less 。保持 babel-plugin-import 的 style 属性配置为 true。

2>、运行会报错,安装postcss-pxtorem(移动端采用Flexible将px转换rem适配)

npm install postcss-pxtorem

5、添加 webpack.config.js,配置文件如下

const path = require('path');
const pxtorem = require('postcss-pxtorem');
let webpack = require('webpack');

const vendors = [
  'react',
  'react-dom',
  'react-redux',
  'react-router',
  'react-router-redux',
  'redux',
];


module.exports = function (webpackConfig, env) {
  webpackConfig.entry = {
    index: './src/index.js',
    vendor: vendors,
  };
  const svgDirs = [
    require.resolve('antd-mobile').replace(/warn\.js$/, ''),  // 1. 属于 antd-mobile 内置 svg 文件
    path.resolve(__dirname, 'src/svg-foler'),  // 2. 自己私人的 svg 存放目录
  ];
  // 因为一个 SVG 文件不能被处理两遍. 在 atool-build 默认为 svg配置的svg-url-loade 里 exclude 掉需要 svg-sprite-loader处理的目录
  // https://github.com/ant-tool/atool-build/blob/master/src/getWebpackCommonConfig.js#L162
  // https://github.com/kisenka/svg-sprite-loader/issues/4
  if (webpackConfig.module.loaders && Array.isArray(webpackConfig.module.loaders)) {
    webpackConfig.module.loaders.forEach((loader) => {
      if (loader.test && typeof loader.test.test === 'function' && loader.test.test('.svg')) {
        loader.exclude = svgDirs;
      }
    });
    // 4. 配置 webpack loader
    webpackConfig.module.loaders.unshift({
      test: /\.(svg)$/i,
      loader: 'svg-sprite',
      include: svgDirs, // 把 svgDirs 路径下的所有 svg 文件交给 svg-sprite-loader 插件处理
    });
  }

  webpackConfig.plugins.push(new webpack.optimize.CommonsChunkPlugin({
    names: ['vendor'],
    minChunks: Infinity,
  }));

  return webpackConfig;
};

以上代码段注意点:

1>、Array.isarray(XXX)的方法必须加上,不然会报错:TypeError: Cannot read property 'forEach' of undefined

2>、编译过程中报错指定的CSS文件无法导入,报错

Module parse failed .css Unexpected token (1:0) You may need an appropriate loader to handle this file type

(并没有找到为什么会这样,然后配置完成之后安装以下插件,再编译又通过了。。。。。。)

配置支持svg图片,需要安装插件

npm install --save-dev gulp-svg-sprites
npm i svg-sprite-loader

6、高清方案配置,修改index.ejs文件,将Viewport的设置通过一个js脚本来代替

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <!-- 原来的meta配置 -->
  <!-- <meta name="viewport" content="width=device-width, initial-scale=1"> -->
  <!-- 更改后的配置,将viewport的设置通过一个js脚本代替 -->
  <meta content="yes" name="apple-mobile-web-app-capable">
  <meta content="yes" name="apple-touch-fullscreen">
  <meta content="telephone=no,email=no" name="format-detection">
  <script>
    !function(e){function t(a){if(i[a])return i[a].exports;var n=i[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=window;t["default"]=i.flex=function(e,t){var a=e||100,n=t||1,r=i.document,o=navigator.userAgent,d=o.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i),l=o.match(/U3\/((\d+|\.){5,})/i),c=l&&parseInt(l[1].split(".").join(""),10)>=80,p=navigator.appVersion.match(/(iphone|ipad|ipod)/gi),s=i.devicePixelRatio||1;p||d&&d[1]>534||c||(s=1);var u=1/s,m=r.querySelector('meta[name="viewport"]');m||(m=r.createElement("meta"),m.setAttribute("name","viewport"),r.head.appendChild(m)),m.setAttribute("content","width=device-width,user-scalable=no,initial-scale="+u+",maximum-scale="+u+",minimum-scale="+u),r.documentElement.style.fontSize=a/2*s*n+"px"},e.exports=t["default"]}]);
    // 原来值为100,修改为200了,则正常展示了,此处修改待考究
    flex(200, 1);
  </script>
  <title>登录系统</title>
  <link rel="stylesheet" href="index.css" />
</head>
<body>
  <div id="root"></div>
</body>
</html>

在运行时,开始组件超级大,后来在谷歌上只展示50%的大小,就修改了flex里的值为200页面就正常展示了

7、页面测试,修改indexPage.js页面,运行成功

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

function IndexPage() {
  return (
    <div>
      <NavBar
        mode="light"
        icon={<Icon type="left" />}
        onLeftClick={() => console.log('onLeftClick')}
        rightContent={[
          <Icon key="0" type="search" style={{ marginRight: '16px' }} />,
          <Icon key="1" type="ellipsis" />,
        ]}
      >标题啊喂</NavBar>
    </div>
  );
}

IndexPage.propTypes = {
};

export default connect()(IndexPage);
npm start
8、antd-mobile自定义主题开发, 修改 Ant Design 的样式变量

1>、新建themes文件夹,新增default.less文件,内容如下

@import '~antd-mobile/lib/style/themes/default.less';
// 背景色
@fill-base: #e9102d;
// @fill-base: #fff;                           // 组件默认背景,设置修改后的色值
@fill-body: #f5f5f9;                           // 页面背景
// 全局/品牌色
@brand-primary: #e9102d;

注意:只需写出要覆盖的变量即可(不需要覆盖的变量不要写)

参数链接:ant-mobile设计变量表以及命名规范 、支付宝钱包默认主题配置文件

2>、新建theme.config.js文件,内容如下

const fs = require('fs');
const path = require('path');
const lessToJs = require('less-vars-to-js');

module.exports = () => {
  const themePath = path.join(__dirname, './themes/default.less');
  return lessToJs(fs.readFileSync(themePath, 'utf8'));
};

通过 less-vars-to-js 的工具读取 less 文件变量,安装 less-vars-to-js 

npm install less-vars-to-js 

3>、配置在.roadhogrc.js下的theme字段,theme可以配置为对象或文件路径

theme : "./theme.config.js" ,
4>、注意:在修改了theme.config.js里的变量配置时,需要用npm start重启,才能生效。


参考博文:点击打开链接





  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: antd-mobile-vue是一个基于Vue.js框架的移动端组件库,它提供了一系列UI组件,用于开发高质量的移动端应用。 与其它UI组件库相比,antd-mobile-vue具有以下优势和特点: 1. 高质量的组件:antd-mobile-vue提供了丰富的移动端UI组件,如按钮、表单、弹窗、导航等,这些组件都经过了精心设计和开发,具有统一的风格和良好的用户体验。 2. 灵活的布局:antd-mobile-vue提供了灵活的布局组件,如栅格布局、Flex布局,可帮助开发者快速搭建页面结构,并自适应不同的屏幕尺寸。 3. 易于使用和扩展:antd-mobile-vue的组件使用简单,开发者可以通过简单的配置和参数就可以实现复杂的交互效果。而且,antd-mobile-vue的组件提供了丰富的扩展能力,可以根据项目需求进行个性化的定制。 4. 生态丰富:antd-mobile-vue拥有庞大的开发者社区和活跃的维护团队,开发者可以通过官方文档和社区资源获取帮助和支持。此外,antd-mobile-vue还与其它Vue.js生态工具和库良好地兼容,如Vue Router、Vue CLI等。 5. 支持国际化:antd-mobile-vue提供了多语言支持,开发者可以根据项目需求灵活地切换多种语言环境。 总之,antd-mobile-vue是一个功能强大、易于使用和扩展的移动端组件库,它可以帮助开发者快速构建高质量的移动端应用,提高开发效率和用户体验。 ### 回答2: antd-mobile-vue是一种基于Vue.js框架的移动端UI库。它是对Ant Design Mobile的Vue组件实现的封装和扩展,旨在为开发者提供高质量、易用性的移动端组件库,帮助快速开发移动应用程序。 antd-mobile-vue提供了丰富的移动端UI组件,如按钮、导航栏、标签栏、列表、表单等,可以满足日常开发中绝大部分的界面需求。这些组件都经过精心设计和优化,在视觉和交互上都符合当前移动端的设计原则和用户体验。而且,它还提供了灵活的定制和扩展能力,允许开发者根据具体需求进行个性化定制,提高开发效率和用户体验。 除了UI组件外,antd-mobile-vue还提供了一些实用的工具和功能,如样式工具库、语言国际化、路由管理等。这些工具和功能都是为了让开发者更方便地进行移动应用开发,减少重复性的工作,提高开发效率。 antd-mobile-vue拥有广泛的社区支持和文档资料,开发者可以从社区中获取帮助和解决问题,学习和掌握使用该库的技巧和最佳实践。同时,antd-mobile-vue还提供了详细的官方文档和示例代码,方便开发者快速入手和上手该库。 总之,antd-mobile-vue是一款功能强大、易用性强的移动端UI库,适用于各种移动应用的开发。无论是个人开发者还是团队开发,都可以通过使用antd-mobile-vue来快速构建高质量的移动应用程序。 ### 回答3: antd-mobile-vue 是一个基于 Vue.js 的移动端 UI 组件库,它提供了丰富的移动端组件和样式风格,可以帮助开发者快速构建优雅的移动端应用。 antd-mobile-vue 的特点有以下几个方面: 1. 高度可定制:antd-mobile-vue 提供了大量的组件,涵盖了移动端常见的UI元素,如按钮、导航栏、表单等,这些组件的样式和交互行为都可以通过配置进行定制,满足不同项目的需求。 2. 兼容性强:antd-mobile-vue 提供了对不同移动端浏览器和操作系统的支持,保证组件在不同环境下的正常运行和展示,同时也保证了用户的使用体验。 3. 特色设计:antd-mobile-vue 的设计风格简洁、现代,符合移动端用户的审美要求,同时也遵循了 Material Design 和 iOS Human Interface Guidelines 等设计准则,保证了用户的熟悉感和易用性。 4. 文档丰富:antd-mobile-vue 提供了详细的文档和示例代码,开发者可以根据文档了解组件的使用方法和配置参数,快速上手使用。 5. 生态丰富:antd-mobile-vue 是基于 Ant Design Mobileantd-mobile)的 Vue 实现,可以与其它 Vue 生态工具和插件无缝集成,如 Vue Router、Vuex 等,方便开发者构建复杂的移动应用。 总之,antd-mobile-vue 是一个强大而灵活的移动端 UI 组件库,它可以帮助开发者节省时间和精力,快速开发出高质量的移动应用。无论是个人项目还是企业应用,都可以考虑使用这个库来提升开发效率和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值