下载安装
https://nodejs.org/zh-cn
Yarn
npm i -g yarn
yarn
yarn init - 初始化新项目并创建 package.json 文件
yarn add [package] - 将一个或多个包添加到项目中
yarn remove [package] - 从项目中移除一个或多个包
yarn install - 安装项目中所有依赖项
yarn upgrade [package] - 更新一个或多个包至最新版本
yarn run [script] - 运行在 package.json 中定义的脚本
yarn build - 执行构建命令以生成生产环境所需的文件
yarn start - 启动应用程序或服务器
yarn test - 运行测试套件
文件读写
let fs = require('fs')
function readFile(path) {
try {
return fs.readFileSync(path, { encoding: 'utf-8' })
} catch (e) {
return ''
}
}
function writeFile(path, content) {
fs.writeFileSync(path, content)
}
开启HTTP服务
var http = require('http')
function runServer() {
neatenSort()
startGenerate()
var documentRoot = './target'
http.createServer(function (req, res) {
var url = req.url
if (url == '/' || url == '/article' || url == '/article/**') {
url = '/index.html'
}
var file = documentRoot + url
fs.readFile(file, function (err, data) {
if (err) {
res.writeHeader(404, {
'content-type': 'text/html;charset="utf-8"'
})
res.write(readFile('404.html'))
} else {
let contentType = 'text/html;charset="utf-8"'
if (url.indexOf('.css') > -1) {
contentType = 'text/css;charset=utf-8'
} else if (url.indexOf('.js') > -1) {
contentType = 'application/javascript;charset=utf-8'
} else if (url.indexOf('.svg') > -1) {
contentType = 'image/svg+xml;charset=utf-8'
}
res.writeHeader(200, {
'content-type': contentType
})
res.write(data)
}
res.end()
})
}).listen(7981)
let tempTimer = 0
let number = 1
fs.watch('./docs', { recursive: true }, (eventType, filename) => {
let timer = new Date().getTime()
if (timer - tempTimer > 2000 && eventType == 'rename') {
setTimeout(() => {
console.log('A file or directory is renamed: ' + filename + ', resort');
neatenSort()
startGenerate()
}, 500);
tempTimer = timer
} else if (timer - tempTimer > 2000 && eventType == 'change') {
console.log('A file is changed: ' + filename + ' > ' + (number++));
startGenerate()
tempTimer = timer
}
})
console.log('Service started successfully, url is http://localhost:7981/')
readCommand()
}
文件夹复制
function cpSync(source, destination) {
let major = process.version.match(/v([0-9]*).([0-9]*)/)[1]
let minor = process.version.match(/v([0-9]*).([0-9]*)/)[2]
if (Number(major) < 16 || Number(major) == 16 && Number(minor) < 7) {
if (fs.existsSync(destination)) fs.rmSync(destination, { recursive: true })
fs.mkdirSync(destination, { recursive: true })
let rd = fs.readdirSync(source)
for (const fd of rd) {
let sourceFullName = source + "/" + fd
let destFullName = destination + "/" + fd
let lstatRes = fs.lstatSync(sourceFullName)
if (lstatRes.isFile()) fs.copyFileSync(sourceFullName, destFullName)
if (lstatRes.isDirectory()) cpSync(sourceFullName, destFullName)
}
} else {
fs.cpSync(source, destination, { force: true, recursive: true })
}
}
Sleep休眠
function sleep(ms) {
return new Promise(resolve=>setTimeout(resolve, ms))
}
async function main() {
console.log(1)
await sleep(1500)
console.log(2)
}
main()