1. 程式人生 > >螞蟻金服UI-Antd-design Mobile of React按需載入

螞蟻金服UI-Antd-design Mobile of React按需載入


import React from 'react';
import ReactDOM from 'react-dom';
// 由於 antd 元件的預設文案是英文,所以需要修改為中文
import zhCN from 'antd/lib/locale-provider/zh_CN';
import moment from 'moment';
import 'moment/locale/zh-cn';

//import 'antd-mobile/dist/antd-mobile.css';  // or 'antd-mobile/dist/antd-mobile.less'
import { Button } from 'antd-mobile';

moment.locale('zh-cn');

class App extends React.Component {
  
 
  render() {
    return (
      <div>
        <Button>Start</Button>
        
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));

按需載入的方式官網給我們推薦了兩種;

第一種方式:babel-plugin-import

1、在專案上進行安裝 npm install babel-plugin-import --save

2、裝載

A、野蠻在webpack.config.js裝載

module.exports = function(webpackConfig) {
  webpackConfig.babel.plugins.push('transform-runtime');
  webpackConfig.babel.plugins.push(['import', {
    libraryName: 'antd-mobile',
    style: 'css',
  }]);

  return webpackConfig;
};

B、在根目錄下新建.babelrc進行配置

{
  "presets": ["react", "es2015"],
  "env": {
    "dev": {
        "plugins": ["transform-runtime", ["import", { "libraryName": "antd-mobile", "style": true }]] //style引數css時載入css檔案,true時載入less
    }
  }
}

Babel會從當前目錄查詢.babelrc檔案。這個目錄是檔案被編譯的目錄。如果不存在,那麼他會根據目錄樹上尋這個檔案,或者在package.json中尋找"babel":{}這個選項。使用"babelrc":false進行設定來停止查詢行為

C、也可以在package.json中配置.babelrc

{
    "name":"Antd-Mobile",
    "version":"1.0.0",
    "babel":{
        //在此設定
    }
}
"babel": {
    "presets": ["react", "es2015"],
    "plugins": [["import", [{ "libraryName": "antd-mobile", "style": "css" }]]]
  }


外掛效果:注意點:1、在使用babel-plugin-import時webpack.config.js配置loader載入器時需去除include和exclude,因為antd-mobile的樣式依賴都在node_modules,否則它將不會去包裡尋找資源;
module: {
        loaders: [
            { test: /\.(js|jsx)$/, 
            //exclude: /node_modules/, 
            loader: 'babel-loader'
            },//exclude 排除
            { test: /\.less$/, 
                //exclude: /node_modules/,
                loader: 'style!css!postcss!less' },
            { test: /\.css$/, 
                //exclude: /node_modules/, 
                loader: 'style!css!postcss' },
            { test:/\.(png|gif|jpg|jpeg|bmp)$/i, loader:'url-loader?limit=5000' },  // 限制大小5kb
            { test:/\.(png|woff|woff2|svg|ttf|eot)($|\?)/i, loader:'url-loader?limit=5000'} // 限制大小小於5k
        ]
    },

2、注意在webpack配置按需載入後需要把package.json中的babel去除;

3、當然還有利用一些腳手架新建專案後根據腳手架,如Create-React-App等,去配置相關的babel即可,萬變不離其宗;

eg:

"extraBabelPlugins": [
    "transform-runtime",
    ['import', { 'libraryName': 'antd-mobile', 'libraryDirectory': 'lib', 'style': true }]
  ],

第二種方式:就是直接寫路徑,用到什麼就引入什麼,
import DatePicker from 'antd-mobile/lib/date-picker';  // 載入 JS
import 'antd-mobile/lib/date-picker/style/css';        // 載入 CSS
// import 'antd-mobile/lib/date-picker/style';         // 載入 LESS

效果:


謝謝!歡迎糾正補充~~

附: