antd源碼解讀(1)-index.js

github: 地址
gitbook: 地址node

Index.js

看一個代碼的時候首先固然是從他的入口文件開始看起,因此第一份代碼咱們看的是/index.js文件git

開始

打開index.js文件,代碼只有28行,其中包含了一個camelCase函數(看函數名就知道這是個給名稱進行駝峯命名法的函數),一個req變量,以及這個的變量操做和export操做github

在這個文件裏面我首先查了require.context()這個函數的使用,能夠參考這裏,以及exportsmodule.exports的區別,能夠參考這裏,這裏是一些鋪墊,下面進入正題api

經過上面兩個鋪墊,咱們知道了req這個變量是用來循環拋出組件的一個對象,而且還拋出了每個組件的樣式文件markdown

// index.js
  function camelCase(name) {
    return name.charAt(0).toUpperCase() +
      name.slice(1).replace(/-(\w)/g, (m, n) => {
        return n.toUpperCase();
      });
  }

  // 拋出樣式 這個正則是匹配當前目錄下的全部的/style/index.tsx文件
  const req = require.context('./components', true, /^\.\/[^_][\w-]+\/style\/index\.tsx?$/);

  req.keys().forEach((mod) => {
    let v = req(mod);
    if (v && v.default) {
      v = v.default;
    }
    // 拋出組件 這個正則是匹配當前目錄下的素有index.tsx文件
    const match = mod.match(/^\.\/([^_][\w-]+)\/index\.tsx?$/);
    if (match && match[1]) {
      if (match[1] === 'message' || match[1] === 'notification') {
        // message & notification should not be capitalized
        exports[match[1]] = v;
      } else {
        exports[camelCase(match[1])] = v;
      }
    }
  });

  module.exports = require('./components');複製代碼

可是最後不知道爲甚還須要加上對吼那一句module.exports = require('./components');
既然上面都已經拋出,爲何這裏還須要再次拋出,不過好像是跟什麼環境和打包以後的一些操做有關,因此這裏一兩次拋出。這個地方還須要向你們請教。antd

相關文章
相關標籤/搜索