什么是node?
node的安装
- nodejs.org/en/
- mac homebrew: brew install node
nvm
- node版本管理工具,可切换node版本号
nrm npm源管理工具
- nrm list
- nrm use cnpm ; nrm use taobao...
node是运行时,之所以可以直接控制台运行 node,是因为添加到了环境变量
- add to path
用node运行一个js文件
- 控制台中直接运行
node a.js
复制代码
- 在编辑器中使用node
IDE设置支持node环境设置
复制代码
nodejs特点
- 主线程是单线程异步。通过callback实现异步。
- 非阻塞、异步I/o,能用异步 绝不同步
- event-driven事件驱动-发布订阅模式
###web前端异步
- setTimeout
- callback
- ajax
- onclick等事件
global & 环境变量
global
- 在文件中打印this,node执行此文件,输出的this不是global,而是 {};
- 在控制台运行node环境,输出this就是global;
原因:node自带模块化功能,一个js文件就是一个模块,nodejs模块是通过闭包(自执行函数)实现的,模块的this不是global
console.log(this) // {}
consoel.log(this === global)//false
复制代码
- 每个文件都是一个模块,都有局部作用域,所以声明对象不会挂载到全局global上;不声明,通过作用域查找会挂载到global上
var a = 1;
console.log(global.a) //undefined
b = 2;
console.log(global.b)//2
复制代码
- global是全局变量,在所有模块中均可不声明直接使用global,global上的属性也可以直接使用。
//1.console.log/warn/info/error
//console.time + console.timeEnd 用来计算时间差
console.time('time')
for(let i = 0;i++;i<2000){
}
console.timeEnd('time'); //target: 0.263ms
//2.process 进程,可以用来设置环境变量,区分环境,
//3.Buffer缓存区
//4.setTimeout clearTimeout ; setImmediate clearImmediate
复制代码
process进程 & 环境变量
- process.env,可以在process.env上增加NODE_ENV属性区分开发环境和生产环境
/*
{ PATH: '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin',
SHELL: '/bin/bash',
FORCE_COLOR: 'true',
ELECTRON_NO_ATTACH_CONSOLE: 'true',
USER: 'shiqiao',
DEBUG_COLORS: 'true',
TMPDIR: '/var/folders/s7/bcsmxhf15551jq1xctzbwhhm0000gn/T/',
npm_config_color: 'always',
SSH_AUTH_SOCK: '/private/tmp/com.apple.launchd.d4VtTs9GCP/Listeners',
MOCHA_COLORS: '1',
XPC_FLAGS: '0x0',
__CF_USER_TEXT_ENCODING: '0x1F5:0x19:0x34',
Apple_PubSub_Socket_Render: '/private/tmp/com.apple.launchd.fEp3WInsEM/Render',
LOGNAME: 'shiqiao',
LC_CTYPE: 'zh_CN.UTF-8',
XPC_SERVICE_NAME: 'com.jetbrains.WebStorm.1360',
PWD: '/Users/shiqiao/study/20181122',
HOME: '/Users/shiqiao' }
*/
设置NODE_ENV
1.在控制台里配置NODE_ENV。
mac:export NODE_ENV=dev
windows: set NODE_ENV=dev
查看的时候 需要控制台运行才能看到设置的NODE_ENV
// bogon:20181122 shiqiao$ export NODE_ENV=dev
// bogon:20181122 shiqiao$ node 2.process.js
2.IDE webstorm设置环境变量,在webstorm设置环境变量,右上脚,三角箭头,可以设置
直接IDE 运行js文件就可已看到NODE_ENV
复制代码
//如果代码放到服务器上,那就没有此环境变量,那就取不到。取不到,可以走线上环境。webpack会用到,根据环境变量区分生产环境和开发环境
console.log(process.env.NODE_ENV)
let url = "";
if(process.env.NODE_ENV=='dev'){
url = 'http://localhost:3000';
}else{
url = 'http://www.aaa.cn';
}
console.log(url);
复制代码