Open Kumasan850314 opened 1 year ago
可以都全部 Enter,會創建一個 package.json
npm init
假設我要上傳一個專案,但是有很多模組,就可以直接把 node_module 資料夾刪除再上傳,然後下載的人也可以到package.json
查看我使用了哪些模組,下載專案之後它也可以用 npm install
就會自動把模組都下載回來。
從 npm 5 以後,--save 就已經變成預設的選項了,因此 npm install 不加 --save 也是可以的喔,一樣會把資訊寫到 package.json 裡面去!
最常用的是下面這種寫法。然後在終端機輸入
npm run start
就會執行node index.js
。(一種約定俗成的寫法,就可以直接執行專案)"scripts": { "start": "node index.js", },
Javascript 是根據 ECMAScript 規範實做的。ECMAScript 6 發布於 2015年,簡稱 ES6。 如果不知道什麼時候要用,就不要用,但是至少知道有這些語法可以用,不用再造輪子了。但可以把 var 換成 let、const 了。
一般字串不能這樣拚接,必須用 /n 才可以拼接字串
let str = ' hello
world'
Uncaught SyntaxError: Invalid or unexpected token
如果你的字串很長就會很繁瑣很複雜,像是這樣 可以比較兩者的差別,就不用寫一堆的引號跟+號,也很好辨別。${裡面可寫JS}
function hi(name){
console.log("hi "+ name + " now is " + new Date() )
console.log(`hi ${name} now is ${new Date()} yo ${name} `)
}
hi('kuma')
反正它就會自己 mapping 上去
const arr = [1, 2, 3]
let [a1, a2, a3] = arr
console.log(a1, a2, a3) // 1 2 3
----
const obj = {
name: 'kuma',
age: 30
family: {
father: 'nick'
}
}
let {name, age} = obj
let {family: {father}}
console.log(name, age) // kuma 30
console.log(father) // nick
----
function test({a, b}){
console.log(a, b)
}
test({a:1, b:2})
展開陣列
function add(a, b, c){ return a + b + c } let array = [1, 2, 3] console.log(add(...array)) // 6
展開物件
let obj1 = {a:1, b:2} let obj2 = {a:3, ...obj1 } // a=1, b=2 原本的會被蓋掉
也可以用來複製陣列、物件的值。複製的並不會指向同一個記憶體。所以用 === 比較會是 false,
let nobj1 = {name: 'kuma', age: 30} let nobj2 = nobj1 console.log(nobj1 === nobj2) // true ---- let nobj2 = {...nobj1} console.log(nobj1 === nobj2) // false
用在函數的預設值
function hello(str, times=5){
return `${str} times: ${times}`
}
console.log(hello('kuma')) // kuma times: 5
比較一下兩者的寫法,要注意 this
var arr10 = [1,2,3,4]
console.log(
arr10
.filter(function(value) { return value > 1 })
.map(function(value) { return value * 2 })
)
----
console.log(
arr10
.filter(value => value >1)
.map(value => value *2 )
)
ES5: require、module.export ES6: import、export {}
Export 有幾種方式:
如果想要用其他名字,可以用 as 取別名,例如說 export { add as addFunction } 可以用 import * as utils from 'utils' 把全部都 import 進來
之後有問題看看這些: [Node] CommonJS Modules and ES Modules nodejs的import和export,如何编写执行es6模块? ES6 模組系統
補充紀錄用:
請試著將 import 的 file 全名打完,不要省略副檔名 .js。
import std from './route/student' -> import std from './route/student.js'
現在 nodejs 似乎支援 export, import 這類 ES Modules 的特性,但是要在 package.json 裡面加上 "type": "module" 才能正常使用。
更多 ES6 新增的語法:https://github.com/DrkSephy/es6-cheatsheet
babel-node 比較適合自己用/看,不太適合用在產品,效能不太好。正常使用會先用 Babel 編譯完,再用 NodeJS 執行編譯好的檔案。
Babel 的安裝說明:https://babeljs.io/docs/en/next/babel-node.html
設定步驟:
.babelrc { "presets": ["@babel/preset-env"] // 這個會把 ES6 轉 ES5 }
最後使用 npx babel-node index.js 即可
Module 模組
沒有模組化的程式一開始可能會長這樣,且都放在一起:
Require、Exports
以 NodeJs 為例,要引入 NodeJs 提供的一個 os 模組
myModule.js
index.js
延伸閱讀
webpack 新手教學之淺談模組化與 snowpack