⛄最近要写一些npm命令发现文件读写和路径API忘记了,索性直接复习了一遍NodeJS,边学边忘真的痛苦。
⛄本文包含以下内容:对NodeJS的基础介绍,NodeJS的内置包的简单介绍,CommonJS模块化介绍,npm包下载与发布介绍。
⭐注:本文是对黑马程序员Node.js全套入门教程的学习笔记记录,加入了一些自己的练习改动与思考。
⭐推荐大家去看原视频:黑马程序员Node.js全套入门教程
====浏览器====
待执行的JS代码
↓
JavaScript解析引擎
====浏览器====
浏览器中含有JavaScript解析引擎负责解析JS代码
Chrome浏览器的V8解析引擎性能最好
====浏览器====
DOMAPI BOMAPI AjaxAPI
↓
待执行的JS代码(调用WebAPI)
↓
JavaScript解析引擎
每个浏览器都内置了DOM、BOM这样的API函数,因此,浏览器中的JavaScript才可以调用它们。
====Chrome浏览器运行环境====
V8引擎 内置API
↑ ↓
待执行的JavaScript代码
====Chrome浏览器运行环境====
====Node.js运行环境====
V8引擎 内置API(fs path http JS内置对象等)
↑ ↓
待执行的JavaScript代码
====Chrome浏览器运行环境====
Node,js作为一个JavaScript 的运行环境,仅仅提供了基础的功能和API。然而,基于Node.,js提供的这些基础能,很多强大的工具和框架如雨后春笋,层出不穷,所以学会了Node.js,可以让前端程序员胜任更多的工作和岗位。
如果希望通过Node.,js 来运行Javascript 代码,则必须在计算机上安装Node.js环境才行。
node -v
,即可查看node.js版本号node <js文件名>
运行js文件// Nodejs内置模块 无需额外安装
const fs = require('fs')
fs.readFile(path[, options], callback)
示例代码
const fs = require('fs')
fs.readFile('./test.text', 'utf8', function (err, dataStr) {
// 如果读取成功,则err为null
// 如果读取失败,err的值为错误对象
if(err) {
console.log(err)
}
console.log('+++++++++')
// 打印成功的结果
console.log(dataStr)
})
fs.writeFile(file, data[, options], callback)
示例代码
const fs = require('fs')
fs.writeFile('./write.text', 'Hello FS Module!', 'utf8', function (err) {
// 如果写入成功,则err为null
// 如果写入失败,err的值为错误对象
if (err) {
console.log(err)
}
})
__dirname
const fs = require('fs')
fs.readFile(__dirname + '/test.text', 'utf8', function (err, dataStr) {
// ...
})
fs.writeFile(__dirname + '/write.text', 'Hello FS Module!', 'utf8', function (err) {
// ...
})
// Nodejs内置模块 无需额外安装
const fs = require('fs')
path.join([...path])
const path = require('path')
const pathStr = path.join('/a', '/b/c', '../', './d', 'e')
console.log(pathStr) // \a\b\d\e
const pathStr2 = path.join(__dirname, './files/1.text')
console.log(pathStr2) // 将相对路径转化为绝对路径
__dirname + './a'
会在路径中多出一个点(.)使用path.join可以解决此问题path.basename(path[, ext])
使用示例
const path = require('path')
const fpath = '/a/b/c/index.html'
let fullName = path.basename(fpath)
console.log(fullName) // index.html
let nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt) // index
path.extname(path)
参数解释:
使用示例
const path = require('path')
const fpath = '/a/b/c/index.html'
let fext = path.extname(fpath)
console.log(fext) // .html
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
console.log('Someone visit our web server.')
const url = req.url // 请求地址
const method = req.method // 请求url
// 根据路径判断返回不同内容
let content = '<h1>404 Not found!</h1>'
if(url === '/' || url === '/index.html') {
content = '<h1>首页</h1>'
}
res.setHeader('Content-Type', 'text/html; charset=utf-8') // 设置响应头
res.end(content) // 向客户端响应内容
})
server.listen(80, () => {
console.log('http server running at http://127.0.0.1')
})
// 加载内置fs模块
const fs = require('fs')
// 加载用户自定义模块
const custom - require('./custom.js')
// 加载第三方模块
const moment - require('moment')
代码示例
// moduleA.js
// 导出变量
module.exports.username = 'zs'
module.exports.sayHello = function() {
console.log('Hello!')
}
// main.js
// 导入并使用变量
const moduleA = require('./moduleA.js')
moduleA.sayHello()
console.log(module.exports) // {}
console.log(exports) // {}
console.log(module.exports === exports) // true
Node.js遵循了CommonJS模块化规范,CommonJS规定了模块的特性和各模块之间如何相互依赖。
模块第一次加载后会被缓存,即多次调用 require()
不会导致模块的代码被执行多次,提高模块加载效率。
内置模块加载优先级最高。
加载自定义模块时,路径要以 ./
或 ../
开头,否则会作为内置模块或第三方模块加载。
导入自定义模块时,若省略文件扩展名,则 Node.js 会按顺序尝试加载文件:
.js
扩展名加载.json
扩展名加载.node
扩展名加载/node_modules
文件夹中加载第三方模块。例如,假设在 C:\Users\bruce\project\foo.js
文件里调用了 require('tools')
,则 Node.js 会按以下顺序查找:
C:\Users\bruce\project\node_modules\tools
C:\Users\bruce\node_modules\tools
C:\Users\node_modules\tools
C:\node_modules\tools
当把目录作为模块标识符进行加载的时候,有三种加载方式:
package.json
的文件,并寻找 main
属性,作为 require()
加载的入口package.json
文件,或者 main
入口不存在或无法解析,则 Node.js 将会试图加载目录下的 index.js
文件。# 初始化npm配置文件
# -y表示使用配置默认选项
# 执行后出现 package.json 文件
npm init -y
# 下载包
npm install <包名称>
# 删除包
npm uninstall <包名称>
# 切换镜像源加速下载
npm config set registry=https://registry.npm.taobao.org/
# 在执行npm install命令时,如果提供了-g参数,则会把包安装为全局包。
# 全局包会被安装到C:\Users\用户目录VAppData\RoamingInpm\node_modules目录下。
npm install <包名称> -g
// packge.json
{
"name": "nodeNpm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
// packge.json
{
"name": "myTool", // 包名称
"version": "1.0.0", // 包版本
"description": "", // 包的描述
"main": "index.js", // 包的入口文件
"scripts": { // 包的可执行指令
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [], // 搜索关键字,使用那些关键字可以搜索到该作者
"author": "", // 包的作者
"license": "ISC" // 包遵循的开源协议
}
// main.js
module.export = {
add(a, b){
return a+b
}
}
# 输入账号密码后即可成功登录
npm login
# 将包发布在npm上
npm publish
# 删除发布的包
npm unpublish <包名> --force
⛄以上便是基础篇的全部内容了,学习后能让你对NodeJS有一个大致的了解。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。