---
# System prepended metadata

title: 二、 JS 102 NPM
tags: [2020七月第五週, Lidemy心得, JS102, JavaScript續, 進度筆記]

---

# 二、 JS 102 NPM
###### tags: `JS102` `JavaScript續` `2020七月第五週` `進度筆記` `Lidemy心得` `7/269 

---

## Node Package Manager (NPM)

Node.js 的套件管理，可管理抓下來的 library 、 module 和 package ... 等套件。
`npm -v` 可以看版本。


[npm 小筆記](https://hackmd.io/@b9720012/H1NPCwTew)
[NPM 官方網站](https://www.npmjs.com/)
[npm 中文文档](https://www.npmjs.cn/)
[NPM是什麼？了解Node Package Manager套件管理機制](https://tw.alphacamp.co/blog/npm-node-package-manager)

---

# 二之 1、 JS 102 NPM 安裝 left-pad
###### tags: `JS102` `JavaScript續` `2020七月第五週` `進度筆記` `Lidemy心得` `7/29 

---

[left-pad 套件模組使用](https://www.npmjs.com/package/left-pad)  

left-pad 可以在文字前面加上某些字元、或是郵遞區號，[歷史緣由](https://www.inside.com.tw/article/6041-how-one-programmer-broke-the-internet-by-deleting-a-tiny-piece-of-code)。  
選個測試用的資料夾用指令 `npm install left-pad` 安裝完後，在 CLI 用 `ls`  指令觀看，會發現多了 node_modules 的資料夾，裡面有個資料夾為 left-pad 的 module ， 點開 index.js 會發現有 `module.exports = leftpad` 這行，表示 leftpad 的模組引入。  

使用方式:
```
var leftPad = require('left-pad')
  // 有些套件如果不加引用的 ''./'' ， npm 會自動去找並 require ， 不過官方的 Usage
 預設並沒有，似乎是直接索引;
console.log(leftPad(123, 10, '0'))  

```

會印出 0000000123 。

---

## 可以提供 library 的資訊給他人用

`npm install left-pad --save`

dependencies : 開發和發布後， 仍然依賴這個程式語言之 library 其所開發的供之後使用， --save 會加入到 package.json 內的 dependencies 。  
而 --save-dev 對應到 devDependencies ，只有開發的時候會用到的 library ，正式發行後不會用到，詳細參考 [弄懂 npm install 的 –save 與 –save-dev
](https://chriskang028.wordpress.com/2017/07/05/%E5%BC%84%E6%87%82-npm-install-%E7%9A%84-dependencies-v-s-devdependencies/) 。  

可以用 `npm init` 重新下載 package.json (描述專案的檔案) ， 可以在裡面看到 dependencies ， 看到專案會依賴 left-pad ， 可以看到這專案用了哪些 library 。

如果你的 npm ， node_modules 資料夾刪除了，也可以根據 package.json 的檔案內的 dependencies (前提是有安裝過其他 library 並記錄到)，用 `npm install` 指令將所有需要的 library 或是模組抓下來。

如果要放上 gitHub 記得把 node_modules 加入 .gitignore ， 因為資料夾內 library 太多。

---

# 二之 2、 JS 102 npm scripts 
###### tags: `JS102` `JavaScript續` `2020七月第五週` `進度筆記` `Lidemy心得` `7/29

---

![](https://i.imgur.com/4ljMVfg.png)

可以在 scripts 下寫一些指令，之後 npm 會自動執行  "test" 下的一連串指令。  
專案變大後，可以先在 "main" 下說最主要的檔案為何:

![](https://i.imgur.com/eQEt1AM.png)

範例為 index.js 這個檔案。

---

![](https://i.imgur.com/61HOMyl.png)


或是在 "scripts" 下寫個指令，假如跑到 start(start 可以更名) ， 輸入 `npm run start` ， npm 就會幫你執行 `node index.js` 的動作。

---

如果要執行複數指令，則要在 "scripts" 下點功夫:

```
  "scripts": {
    
	"test1": "node index.js", 
	"test2": "node index2.js",
	"serial": "node index.js && node index2.js"
	
```
例如用串聯的方式，CLI 下執行 `npm run serial` 就會同時執行兩個模組，如果看不到上面的印出方式，需在有 node_modules 和 package.json 的檔案下，且記得先 npm init ， 然後再輸入 node 指令。

[蛋頭教室 如何使用 npm script 變成你的建立工具 重點筆記](http://jamestw.logdown.com/posts/1378697-egghead-how-to-use-npm-scripts-as-your-build-tool)

---

# 二之 3、 JS 102 除 npm 外還有其他選擇 
###### tags: `JS102` `JavaScript續` `2020七月第五週` `進度筆記` `Lidemy心得` `7/29

---

## yarn

https://yarnpkg.com/

由 FB 開發比較新的 NPM ， 用 `yarn -v` 可以看到版本，用 `npm init` 指令跟啟用 npm 類似。

而是在 CLI 介面中透過指令 `yarn` 啟用:

![](https://i.imgur.com/29LZZwd.png)

---

## 用 yarn 加入套件 

跟 `npm install 套件名稱 --save` 類似，不過是使用 `yarn add 套件名稱` ， 跟使用 npm --save 一樣，不過預設是自動更新 package.json 的 dependencies 。

## yarn　也可以使用 scripts 下的指令

跟 `npm run start` (start 可以換其他名稱) 類似，`yarn run start` 。

npm 跟 yarn 選用一個或是皆可~~~

[CLI commands comparison](https://classic.yarnpkg.com/en/docs/migrating-from-npm#toc-cli-commands-comparison)

----
