npm 套件製作

6/16的時候開始研究怎麼做npm套件,爬了一些文章,發現網路很多文章沒有交代很多
細節,需要爬很多文章才知道怎麼做。

在babel編譯的過程中也蠻多問題的

  1. 如果使用create-react-app的話,babel的config這樣設定就好
    "babel": {
      "presets": [
        [
          "react-app"
        ]
      ]
    },
  2. 接下來打指令
    rm -rf dist && mkdir dist && babel ./src/components -d dist --copy-files
  3. 發現錯誤,沒有安裝babel
    ‘babel’ is not recognized as an internal or external command,
    趕快來安裝一下:
    npm install --save-dev @babel/cli
  4. 結果又加了一個index.js把所有元件導出,還在package.json加上
    "main": "dist/export.js",
  5. 後來又報錯:
    Error: [BABEL] C:\demo\monolith\package\src\components\AccountInfo.js: Using `babel-preset-react-app` requires that you specify `NODE_ENV` or `BABEL_ENV` e
    nvironment variables. Valid values are "development", "test", and "production". Instead, received: undefined. (While processing: "C:\\demo\\monolith\\packa
    ge\\node_modules\\babel-preset-react-app\\index.js")

    還要再安裝cross-env
    npm i cross-env
    再修改指令成

    rm -rf dist && mkdir dist && cross-env NODE_ENV=development babel ./src/components -d dist --copy-files
  6. host站要把 package-lock.jsonnode_modules 刪光,再輸入
    npm install --save ./../package
  7. 可以加以下指令到script,要重裝很方便
    rm -rf node_module/custom_module && npm install

 

npm線上版:

首先需要先登入

npm login

接下來把代碼編譯 ES6 => ES5

npm run publish:npm

※已經編譯過就可以跳過這步

然後把package.json的名子改掉

"name": "@catsheue/lib",

之後說我要公開?

npm publish --access=public

然後就可以發佈了,注意版本號

npm version 1.0.2

可以直接更新版本號
※打 git tag 1.0.x 並不會更新package.json裡的版本號

npm publish

 

參考文章
Publishing Packages using npm
How to Publish ES6 React Modules to NPM
Building a React component as an NPM module
The complete guide to publishing a React package to npm
Create a simple React npm package in simple steps using CRA
How to make a beautiful, tiny npm package and publish it
How to Create and Publish React Components using the create-react-app?
How to Publish an Updated Version of an npm Package

flex 必讀文章

A Complete Guide to Flexbox | CSS-Tricks

A Visual Guide to CSS3 Flexbox Properties ― Scotch.io
Flexy Boxes — CSS flexbox playground and code generation tool
Flexbox Froggy – A game for learning CSS flexbox

The Complete CSS Flex Box Tutorial
這篇的圖表還蠻好懂的

CSS Flexbox Tutorial – Vegibit

Visual CSS Flex (Flexbox) Layout Editor / Online Tool
互動式教學,可是介面設計的不太喜歡

flex
很好用的playground


配色很美的教學網站

promise

promise是一個根據你給的callback function回傳的物件

.callback在目前的promise沒跑完前,絕對不會執行
.在then()裡的callback,不管promise有沒有成功,絕對會執行

參考文章:
Using Promises

slick react jest

在react裡使用slick.js雖然簡單又方便,可是加入Jest snapshot test就錯誤百出了,亂試了一下解決方法。第一個錯誤解決了之後又有其它的錯誤。

第一個錯誤可以從issue看到有人也有一樣問題
Testing with Jest causes error #472
Jest testing with react: matchMedia not present, legacy browsers require a polyfill #742

發現還有個傢伙自己fork出一個套件,還不錯笑XD
Package – ryotamurakami-react-slick

另外發現這裡有測試的範例,可以參考來寫測試

不爽不要用:
nuka carousel
@brainhubeu/react-carousel

查一堆資料覺得有點累,後來決定換其它套件試試。發現換成其它套件就可以了,唔…真的是不爽不要用。
我在猜應該是我後來找的套件是專門為react寫的,這個slick以前是基於jQuery寫的,有一些舊邏輯不適合react了。改用@brainhubeu/react-carousel就可以正常跑測試,希望不要再出什麼差錯,抖抖的。(還是應該學好寫扣,哪天能不用別人的套件最好)

Jest手把手教學

首先開啟一個資料夾,乃做做Jest的測試。

mkdir jest-try

開啟好資料夾,在裡面開新專案

npm init -y

接下來就可以安裝Jest

yarn add --dev jest

安裝好之後要幹麻?寫一個JavaScript檔案囉!
開一個檔案叫

double.js

function double(a) {
  return a  = a * 2;
}
module.exports = double;

接下來再開一個檔案叫做double.test.js

const double = require('./double');

test('1 * 2 will be 2', () => {
  expect(double(1)).toBe(2);
});

接下來把package.json中的測試加上去

{
  "scripts": {
    "test": "jest"
  }
}

接著就大功告成啦!!!Holy Cow !!!