--save
=== 生產環境 dependencied
npm install xxx
npm install xxx --save
npm install xxx -S
npm i xxx -S
=== 開發環境 devDependencies
在 devDependencies 添加包
npm install --save-dev
npm install -D
package.json~^區別
~version
大約相當於版本,將更新到所有未來的補丁版本,而不會增加次要版本
~1.2.3
將使用從1.2.3
到<1.3.0
~1.2.*
就是修復的版本
~version
向後兼容的新功能
^2.3.4
到<3.0.0
的版本
^2.*.*
這個形式
關閉端口
npm install -g kill-port關閉一個端口
kill-port 3208
關閉多個端口
kill-port 4208 3200
更強大的功能 fkil-cli
package-lock.json
對於npm修改 node_modules
樹或者 package.json
它描述了生成的確切樹,以便後續安裝能夠生成相同的樹,而不管
中間依賴項更新如何
忽略整個存儲庫的差異,你可以添加到 .gitattributes
package-lock.json binany
yarn.lock binary
node.js 退出
process.exit(code)
代碼結束進程
code = 0
成功的退出
code = 1
失敗的條件退出
命令行退出
node //回車
.exit
把 package.json
所有依賴都更新到最新版本
npm instatl -g npa-check-updates
ncu -U
npm install
process.argv
處理命令行的數組
第一個參數 node的位置信息
第二個參數 當前執行文件的位置信息
第三個到n 輸入的多個參數用逗號分割
process.argy.slice(2)
node寫入文件
const fs = require('fs')
fs.writeFile('./test','我是一個文件',err =>{
if (err) {
console.log('報錯啦');
}
})
// 或者
fs.writeFileSync('./test.text','我是一個文件',err=>{
if (erm) {
console.log('又報錯啦')
}
})
const stream = fs.createwriteStream('my_file.txt');
stream.once('open',()=>{
stream.write('我是一個小文件123 \n')
stream.write('我是一個小文件12333 \n')
stream.end();
})
node 獲取文件夾下的文件名
const fs = require('fs');
fs.readdir('./',(err,files)=>{
//
})
fs.readdinSync('./')
獲取文件夾下所有的目錄
fse.readdir('./', {withFileTypes:true},(err,files)=>{
const vals = files.filter(val => val.isDirectory()).map(dirent => dirent.name);
console.log(vals);
})
// 同步
const vals = fse,readdirSync('./', {withFileTypes: true}).filter(val => val.isDirectory()).map(dirent=>dirent.name);
glob
使用 shell
使用的模式匹配文件,比如星號和其他東西
const glob = require('glob');
glob('./test1/*.js',{},(er, files) => {
console.log(er,files);
})
*
0到多
?
匹配1個
[]
匹配一系列字符,跟正則類似
!(aaa|bbb)
module.exports
作爲 require
調用結果實際返回的對象
test6.js
const myFunc1 = () => {
console.log(1);
}
const myFunc2 = () => {
Console.log(2);
}
exports.myFunc1=myFunc1;
exports.myFunc2=myFunc2;
xx.js
const m = require('./test6');
m.myFunc1();
const {myFunc1}=require('./test6');
myFunc1();
如果你想公開一個函數或者一個變量
test6.js
const myFunc1 = () => {
console.log(1);
}
module.exports = myFunc1
使用
express
const express = require('express');
const app = express();
app.get('/user/:id',(req, res,next) => {
console.log(reg.url);
// {id:111}
console.Log(req.params);
// ?id=2
console.log(req.query.id);
res.send('Hello World')
next();
})
app.listen(3000)
node 請求接口
const axios=require('axios')
axios.get('http://127.0.0.1:3000/user/2').then(res=>{
console.log(res.data);
})
// http://172.30.75.144:3800/usen/2
process.env
設置環境變量
prgcess.env.PORT || 3200
"scripts":{
"start": "PORT=3000 node server.js"
}
判斷文件是否存在
const isdtfe = path => {
try {
if (fs.existsSync(path)) {
return true
}
}catch (_) {
}
return false
}
console.log(isdtfe('./package.json'));
目錄不存在,創建目錄
const fs = pequire('fs');
const dir ='./tmp';
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir)
}
// mkdir
查看文件執行文件
eval(fs.readFileSync('./test6.js')+'')
__filename
和 dirname
filename
- 當前模塊的文件名,解析的是當前模塊的絕對路徑` (D:\caogao\express01.js)
__dirname
- 當前模塊的目錄名(D:\caogao)
process.cwd()
- 返回當前目錄
拿到文件的地址,上級或者上上級
const path=require('path');
path.join(__dirname,'../../')
path.resolve(__dirname,'..')
拿到當前文件名
const path = require('path');
path.basename(__filename)
import
異步延遲加載
const fn =async()=>{
const a = await import('./test6.js');
}
web 服務器
const express = require('express');
const app = express();
app.get('/',express.static(--dinname+'/public'))
app.listen(3000,()=>{
console.log('啓動了');
})
插件庫
http-server
live-server
Buffer緩衝區
buffer是一個全局對象,不需要 require
,
Buffer.from('Hello World').toString('base64')
Buffer.from('SGVsbG8gV29ybG0=','base64').toString('ascii')
下載文件
app.get('/download',(req, res) => {
res.download(`${__dirname}/test1/1.js`)
})
請求的文件下載到本地
axios.get('http://127.0.0.1:3000/download').then(res => {
const fileName = res.headers['content-disposition'].split('filename="')[1].slice(0, -1)
fs.writeFile('./' + fileName, res.data,err=>{
console.log(err);
})
})
獲取完整的url路徑
req.protocol +'://' + req.get('host')+ reg.originalUrl
打印報錯位置的信息
console.trace('測試1')
監聽文件方法變化
npm install nodemon
nodemon app.js
用到 package.json
{
"scpipts":{
"start":"nodemon test8.js"
}
}
ts-node運行ts文件
{
"scripts":{
"start-ts": "ts-node 100.ts"
}
}
複製文件
fs.copyFile('test2.js','test2.js02',err => {
console.log(err);
})
fs-extra
文件系統的方法,用於替代 fs
, fs
模塊的所有方法都附加到 fs-extra
上
文件操作
copy文件夾(異步的)
const fse = pequire('fs-extra');
// 同步
fse.copy('./test1','./testCopy1',err=>{
console.log(err);
}
// promise
fse.copy('./test1','./testCopy2').then(() => {
console.log('成功');
}).catch(err => {
console.log(err);
})
try{
fse.copy('./test1','./testCopy2')
}
catch(e){
console.log(e);
}
copySync(src,dest[,options]) 同步
添加過濾
fse.copy('./test1','./testCopy5', {
filter: function (src, dest) {
// 複製的位置,複製後的所在位置
console.log(src, dest);
// 去複製的文件中有1.js
if(src.includes('1.js')){
return false
}
return true
}
},
err =>{
console.log(err);
})
空目錄(異步)
確保目錄爲空,如果不爲空,則刪除目錄爲空,如果該目錄不存在,則會創建它,目錄本身不會被刪除
fse.emptyDir('./testCopy5',err=>{
console.log(err);
});
.then().catch()
try{}catch{}
emptyDirSync
確保文件存在(異步)
別名 createFile
如果不存在,則創建這些目錄和文件,如果存在則不做改變
fse.ensureFile('./testCopy4/test3/1.Js',err=>{
console.log(err);
}
ensureFileSync(同步)
確保目錄存在(異步)
別名: mkdirs()
, mkdirp()
確保目錄存在,如果不存在,則創建它
fse.ensureDir('./testCopy4/test5',err=>{
console.log(err,'xxx');
})
ensureDirSync(同步)
確保鏈接存在(異步),類似複製黏貼
如果目錄不存在則創建它,存在就報錯,本質類似於複製黏貼
別名: createLink()
fse.ensureLink('./testCopy4/test3/1.js','./testCopy12/test3/2.js',err=>{
console.log(err);
})
ensureLinkSync(同步)
移動(異步)
移動文件或者目錄
fse.move('./testCopy4/1.js', './testCopy4/test108/2.js').then(() => {
console.Loe("成功");
}).catch(err =>{
console.log(err,'失敗');
})
{overwrite:true}
默認爲false,就是不覆蓋
fse.move('./1.js','./testCopy4/test100/2.js', {overwrite: true})
moveSync(同步)
輸出文件(異步)
跟 writeFile
類似,只是父目錄不存在,則創建它,有的話,則覆蓋
const file ='./testCopy4/test100/110.js';
fse.outputFile(file,'我是一個內容',err =>{
console.log(err);
fse.readFile(file,'utf8',(err,data)=>{
console.log(err, data);
})
})
==========
fse.outputFile(file,'我是一個內容').then(()=>fse.readFile(file,'utf8')).then(data=>{
console.log(data);
})
outputFileSync(同步)
輸出json文件(異步)
跟 writeJson
一樣,不存在,則創建它
fse.outputJson(file, {name: 'xxx'}).then(()=> fse.readJson(file)).then(data =>{
console.log(data);
}).catch(err=>{
console.log(err);
})
readJson
throws
設置爲false,當json無效不會拋出
fse.readIson(file, {throws: false}, (err, obj) => {
console.log(err,obj);
})
writeJsonSync(同步)
readJsonSync(同步)
outputJsonSync(同步)
檢測路徑是否存在
fse.pathExists(file,(err,exists)=>{
if (err) {
return;
}
console.log(exists);// true 存在,false 不存在
})
pathExistsSync(同步)
刪除
刪除文件或者目錄,如果路徑不存在,則靜默不執行
fse.remove('./testCopy4/test100',err=>{
if (err) {
console.log(err);
}
})
removeSync(同步)
node內存不足
node --max-lod-spance-size=4096 xxx.js
1GB 1024
2GB 2048
3GB 3072
4GB 4096
5GB 5120
6GB 6144
7GB 7168
8GB 8192
獲取IP
const {networkInterfaces} = require('os');
const getIp = () => {
const ipObj = {};
const nets = networkInterfaces();
for (let name of Object.keys(nets)) {
const item = nets[name];
for (let item of nets[name]) {
const familyV4Value = typeof item.family === 'string' ? 'IPv4' : 4;if (item.family === familyV4Value && !item.internal) {
if (!ipObj[name]) {
ipObj[name] = [];
}
ipObj[name].push(item,address);
}
}
}
return ipObj
}
console.log(getIp());
使用庫 npm install ip
const ip = require('ip');
ip.address();
哈希字符串
node內置模塊
const crypto = require('crypto');
const hash = crypto.createHash('md5').update('我是誰').digest('hex');
console.log(hash);
流
const Readable = require('stream').Readable;
const s = new Readable();
s.push('我是一個Liud1123')
//流的結尾
s.push(null);
// 查春流
s.on('data',(data)=>{
console.log(data);
}
逐行讀取
fse.readFile(' ./test11.js', 'utf8',(err,files)=>{
console.log(files.split('\r\n'));
})
在原有數據中新添加數據
fse.appendFile('./test11.js', '\r\n 我是一個新添加的一行')
設置 {flag:'a'}
也可以在尾部添加
fse.writeFile('./test11.js', 'hello node', {flag: 'a'}, err =>{
console.log(err);
})
拿到當前操作系統
process.platform
// 也可以使用os模塊
const os = require('os');
os.platform()
返回值
darwin // MacOs
win32 win64 // Windons
linex/// Linux
文件擴展名
const path = require('path');
path.extname(__filename)
_filename.split('.').pop()
特定包是否已全局安裝
npm List -g xxx
如果沒有全局安裝
輸出返回爲
D:\Program Files\nodejs
`-- (empty)
檢查腳本是否在node.js 下運行
window 在node.js 中是沒有對象的,所以我們可以判斷他是在node環境下
if(typeof window === 'undefined'){
exports.foo = {};
}else{
window.foo = {};
}
nwjs
基於 Chromium
和Node.js,讓你直接從DOM/webWorker 調用所有Node.js模塊
解壓文件
archiver
對 tar
和 zip
開箱即可支持
glob
工具
npm install glob
通配符查找
const glob = require('glob');
// 異步
glob('**/*.js',{},(err,files)=>{
console.log(files);
})
const a=glob.sync('./test1/**/*.js',{})