贡献者: addis
最初 JS 只能在浏览器执行,但 Node 出现后让其可以在本地执行(尤其是在服务器上),成为了一个像 Python 一样的语言。
node -v
和 npm -v
查看版本。目前是 v16.5.0 和 7.19.1
# Using Ubuntu
curl -fsSL https://deb.nodesource.com/setup_21.x | sudo -E bash - &&\
sudo apt-get install -y nodejs
# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_21.x | bash - &&\
apt-get install -y nodejs
如果有依赖问题,可以把上面的 21.x
改成 20.x
或更低。
在 Ubuntu 18.04 上以上方法全部失败,因为 GLibC 版本过低,node 11.15.0 以上都用不了。而 node 官网下载的 11.15.0 二进制包(如 node-v11.15.0-linux-x64.tar.xz)的 npm -v
又提示 ERROR: npm is known not to run on Node.js v11.15.0
。Ubuntu 很难支持多版本 GLibC 或者将其升级。解决办法只有更新 Ubuntu 或用 docker 了。
npm 的下载页面强烈建议使用 nvm
(Node Version Manager)来管理 nodejs 和 npm 的版本(可以随时切换不同版本)。
node --version
和 npm --version
即可。
#!/usr/bin/env node
console.log("Hello, world!");
然后直接用 ./test.js
即可。这里的 console.log
输出到 stdout
。或者直接 node test.js
(会自动忽略第一行)。
npm init
。这个命令的唯一作用就是生成 package.json
文件,你也可以自己写这个文件。
npm init
提示填写,entry point
填 app.js
. 不想填可以按回车跳过。输入的内容都会在 package.json
中,以后想改可以随时改。
{
"name": "node",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "addis",
"license": "ISC",
"dependencies": {
"express": "^4.18.2"
}
}
express
包是一个 minimalist web framework,一般用于本地 Web Server 对程序进行调试。(如果直接双击 html 文件,浏览器的 url 中使用的是 file 协议而不是 http,会遇到许多问题。
npm install express --save
,其中 --save
会把安装的包保存到 package.json
中的依赖列表。另外会生成 package-lock.json
(指定所有依赖包的版本)以及程序安装目录 node_modules
。
package-lock.json
中的版本号改变了,这是因为网上的包是不断更新版本的,这就是该文件的作用。
app.js
,就是刚才输入的 entry point
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.send('Hello World!');
});
app.listen(3000, function() {
console.log('Example app listening on port 3000!');
});
node app.js
Hello World!
。
上面 app.js
中的 require()
函数是 node 特有的,前端不能用。
node 查找包的顺序是:
fs, http
package.json
中的 main
index.js, index.json, index.node
node_modules
文件夹
node_modules
文件夹,直到根目录
__dirname
是当前 js 脚本的路径(只在 node 中定义)
const path = require('path');
,如 path.join(__dirname, '../', 'index.html')
一个例子,使用 react 的 mui 的 data-grid-complete,展示后端数据库中的一个表,见这里。前端发起 http get 请求,后端读取数据库,返回一个 json 文件。