Nodejs初识
1. 基础
Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
NPM(Nodejs Package Manager)是随同nodejs一起安装的包管理工具,能解决nodejs包依赖。
// first.js 'use strict'; console.log('Hello, world.');
第一行总是写上'use strict';是因为我们总是以严格模式运行JavaScript代码,避免各种潜在陷阱。
文件名必须以.js结尾,文件名只能是英文字母、数字和下划线的组合。
如果在JavaScript文件开头写上'use strict';,那么Node在执行该JavaScript时将使用严格模式。但是,在服务器环境下,如果有很多JavaScript文件,每个文件都写上'use strict';很麻烦。我们可以给Nodejs传递一个参数,让Node直接为所有js文件开启严格模式:
node --use_strict first.js
2. 安装
javascript在nodejs上运行,nodejs底层是C/C++,需要编译安装。
可从官网直接下载编译好的二进制包:https://nodejs.org/en/download/ 或 http://nodejs.cn/download/。目前稳定版本是12.16.1。
tar xvf node-v12.16.1-linux-x64.tar.xz -C /usr/local/bin
在/etc/profile下添加PATH:
export PATH=$PATH:/usr/loca/bin/node-v12.16.1-linux-x64/bin
soure /etc/profile
验证
node -v v12.16.1 npm -v 6.13.4
Node.js REPL
Read Eval Print Loop:交互式解释器,提供nodejs的命令行交互环境。
ctrl+c按下两次退出Node REPL。
.help --列出使用命令
.break -- 退出多行表达式
.clear -- 退出多行表达式
.save filename -- 保存当前node repl会话到指定文件
.load filename -- 载入当前node repl会话内容
3. 模块
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Node环境中,一个.js文件就称之为一个模块(module)。
使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。
要在模块中对外输出变量,用:
module.exports = variable; module.exports = { foo: function(){return 'foo'; } };
输出的变量可以是任意对象、函数、数组等。
要引入其他模块输出的对象,用:
var foo = require('other_module');
引入的对象具体是什么,取决于引入模块输出的对象。
如果只写模块名(不含路径),则node会依次在内置模块、全局模块和当前模块下查找。
示例:
// hello.js 'use strict'; var s = 'hello'; function greet(name){ console.log(s + ', '+name + '!'); } module.exports = greet; //main.js var greet = require('./hello'); var s = 'Wang'; greet(s); // hello, Wang!
Nodejs加载一个文件夹中的所有js文件
一般情况下,使用nodejs加载一个模块是这样,require("js文件路径"),其中路径可以省略掉js后缀。
如果要加载一个文件夹下的所有模块,可以这样使用
var ccc=require("./c");
其中c文件夹下有a和b,index三个js,默认会加载index.js,此时只需要在index.js中定义好module,则就可以直接调用a或者b文件中的方法,具体代码如下
测试文件multifileTest.js
var ccc=require("./c"); var aobj=ccc.aa; var bobj=ccc.bb; aobj.a(); bobj.b();
c文件夹下的index.js
module.exports = {
aa: require(‘./a‘),
bb: require(‘./b‘)
};
c文件夹下的a.js
module.exports.a=function(){ console.log("a") }
c文件夹下的b.js
module.exports.b=function(){ console.log("b") }
4. NPM
yarn也可以管理js包,参考:https://yarn.bootcss.com/docs/cli/config/,yarn在安全性和速度上较好。(npm insatll -g yarn)
npm install express //本地安装 npm install express -g //全局安装 npm list -g npm list express npm uninstall express npm update express npm search express npm init // 创建模块,生成模块package.json文件 npm publish // 发布模块 npm cache clear //清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人 npm unpublish <package>@<version> //撤销发布自己发布过的某个版本代码。
注:npm err! Error: connect ECONNREFUSED 127.0.0.1:8087出现此错误,则
$npm config set proxy null
本地安装
将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。可以通过require()来引入本地安装的包。
全局安装
将安装包放到安装目录或/usr/local下,可以直接在命令行使用。
淘宝NPM镜像
淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
这样就可以使用 cnpm 命令来安装模块了:
$ cnpm install [name]
参考:
1. Node.js教程 https://www.runoob.com/nodejs/nodejs-tutorial.html
2. 廖雪峰node.js https://www.liaoxuefeng.com/wiki/1022910821149312/1023025235359040
3. 淘宝npm镜像帮助 https://developer.aliyun.com/mirror/NPM?from=tnpm
5. https://yarn.bootcss.com/docs/cli/config/ yarn官网,使用文档