记录从 2020.10.2 开始学习node的一些心得体会
JavaScript 的基本语法就是ECMAScript。
平时我们一般写前端,所以此时JS是在浏览器上运行的。在浏览器的环境中,JS除了使用基本语法,还可以使用浏览器所提供的API (DOM和BOM)。
与此相对应的,JS可以不依托于浏览器,而它可以在node环境中执行。在node环境中,JS除了使用基本语法,还可以使用node环境所提供的服务器级别的API(fs/http/path/os 等)。
因此我们可得知,node并不是一种语言,而是一种JS的运行环境。JS在浏览器上运行,能使用DOM/BOM等API,但不能使用 fs/http/path/os 等API;同理,JS在node环境上运行,能使用 fs/http/path/os 等服务器级别的API,但不能使用DOM/BOM等API。
《简单学习前端渲染和后端渲染》点击这里跳转博客
node.js的模块化就是 文件作用域 + 通信规则(commonJS)
common.js的语法是 require(执行模块中的代码和返回模块中exports导出的接口对象)+ exports
其实node.js的模块默认导出的是module.exports对象,它底层有默认的代码是 var exports = module.exports 把后者的引用传给了exports变量,即此时 exports === module.exports ,所以平时我们用 exports 来导出数据其实相当于是一种简写的方式。
所以我们如果要导出单个数据,需要通过例如 module.exports = ‘abcd’ 的方式,而非 exports = ‘abcd’,因为模块最终导出的是module.exports 而非 exports 这个变量,给 exports 赋新值相当于改变了它的引用而不是改变了 module.exports 。
当require一个模块时,其查找顺序如下:
优先从缓存加载(比如,在一次执行中重复 require('./b.js'),b.js中的代码不会重复执行,但可以拿到接口对象)核心模块(内置)路径形式的文件模块(./ 表示当前目录,../ 表示上一级目录,/ 表示当前文件模块所属磁盘根路径,几乎不用)第三方模块(通过 npm 下载,require(‘包名’),有特定的查找规则)当我们第一次开发某个项目的时候,所依赖的包需要自己去 install ,接着这些依赖会被记录到 package.json 中。
当后面打包并上传项目时,不需要再连同 node_modules 一起打包(体积太大)。
当再次拿到项目时,我们可以直接通过 npm install 一键安装所有依赖,因为项目中的 package.json(它就相当于一张说明书)已经记录了所有依赖的包。
npm是国外的网站,所以下载东西时会比较慢。
我们可以通过npm下载cnpm,通过cnpm(淘宝镜像)下载东西就会快很多了。
cnpm会尽量更新到与npm同步。
用 vue-cli 创建vue项目时,个人猜测底层有用到 npm init 这句命令初始化npm来管理依赖。
先要用 npm install express --save 安装好模块。
var express = require('express') var app = express() app.get('/',function(req,res){ res.send('hello express!') }) app.listen(3000,function(){ console.log('app is running...'); })(如有问题详情百度)
先要用 npm install --global nodemon 安装好插件。
后面运行时,用 nodemon 替代 node ,如 nodemon test.js 。
这样就不需要每次修改后,都手动中断服务再重启了。
(实测可行)
使用 use 来设置可访问静态资源,如下:
可通过 localhost:3000/content/XXX 来访问服务器 /public/ 文件夹下的一些静态资源。
var express = require('express') var app = express() app.listen(3000,function(){ console.log('running...'); }) app.use('/content/',express.static('./public/'))详情看 art-template 官方文档
此处使用express框架
app.get('/',function(req,res){ res.send('hello express!') })如果是 get 请求,可以直接用 req.query 获取参数;
如果是 post 请求,需要安装第三方插件 body-parser 。通过这个中间件,我们可以使用 req.body 获取参数。
package.json会记录项目需要用到的直接依赖。
新版本的 npm 在 install 后会多出一个 package-lock.json 。package-lock.json会记录所有相关的依赖,因此当重新 npm install 的时候,安装速度会更快,而且它可以锁定版本,因为package.json只能限定某个包安装的版本范围,而有package-lock.json文件的话就可以制定安装具体版本。
举个例子:
package.json 如果记录了 express 包的版本为1.1.1,那这里的1.1.1只是一个大概的版本范围,并不是最终具体安装版本。
而 package-lock.json 会记录express及其相关依赖(项目直接依赖express包,但express本身也会依赖其他包),并会指明具体安装的包版本。比如express可能实际安装了版本1.2.1,虽然 package.json 记录了 express 包的版本为1.1.1,但 package-lock.json 文件中记录express的版本是1.2.1。
因为有了 package-lock.json ,所以可以安全地锁定版本,并且在重新 npm i 的时候,因为不需要再去重新查找相关依赖,所以会比没有 package-lock.json 的时候安装得更快。