17-1-Nodejs的学习与使用

2017-10-19  本文已影响130人  magic_pill

JavaScript 模块化编程

网站越来越复杂,js代码、js文件也越来越多,会遇到什么问题?

什么是模块化

模块化开发演变

1. 全局函数

2. 命名空间-对象封装

3. 划分私有空间

4. 模块的维护扩展

5. 模块的第三方依赖(文件依赖)

总结

模块化规范

服务器端模块化规范

浏览器端模块化规范

SeaJS

基本使用

1.引入 sea.js 库
2.定义模块
    define(function(require, exports, module){ 模块代码 });
3.依赖模块
    require(‘模块id’)
4.暴露接口
    exports
    module.exports
5.启动模块系统
    seajs.use(‘模块id’,function( 模块对象 ){ 业务代码 });

定义模块 define

1.先有规范,后有实现
2.在CMD规范中,一个模块就是一个js文件
3.define 是一个全局函数,用来定义模块
4.define( factory )
    对象  {}     这种方式,外部会直接获取到该对象
    字符串  ‘’  同上
    函数  function( require, exports, module ){ // 模块代码 }
        为了减少出错,定义函数的时候直接把这三个参数写上,而且顺序不能调换

加载模块 require

1.require(‘模块id路径字符串’)
    用于根据一个模块id加载该模块
    参数必须是一个字符串
    该方法会得到 要加载的模块中的 module.exports 对象
2.只能在模块环境define中使用,define(factory)的构造方法第一个参数必须命名为 require
3.不要重命名require函数或者在任何作用域中给 require 重新赋值

暴露接口 exports 和 module.exports

1.功能:通过给exports或module.exports动态的挂载变量、函数或对象,外部会获取到该接口;
2.exports 等价于 module.exports;
3.可以通过多次给exports 挂载属性向外暴露;
4.不能直接给 exports 赋值;
5.如果想暴露单个变量、函数或对象可以通过直接给 module.exports 赋值 即可。

启动模块 seajs.use

1.在调用 seajs 之前,必须先引入 sea.js 文件
2.通过 seajs.use() 函数可以启动模块,有三种形式
    (‘模块id’[,callback] )    加载一个模块,并执行回调函数
    ( [ ‘模块1’, ‘模块2’ ]  [, callback] )  加载多个模块,并执行回调函数
    callback 参数是可选的
    其中,回调函数中的参数用来接收通过exports返回来的值
3.seajs.use 和 DOM ready 事件没有任何关系
4.最好不要在 define 中 使用 seajs.use

其它

模块标识
高级配置SeaJS
属性 说明
<span style="color:red">alias</span> 别名配置
<span style="color:red">paths 路径配置
vars 变量配置
map 映射配置
preload 预加载项
debug 调试模式
<span style="color:red">base 基础路径
charset 文件编码

requirejs

node-lesson1

1.前端、后端都是干什么的?

2.为什么学习node.js?

3.什么是JavaScript?

4.浏览器中的JavaScript可以做什么?

5.浏览器中的JavaScript不可以做什么?

6.浏览器与JavaScript是什么关系?

引擎
    1.转化
        汽油柴油等等--->转化->成动能
        模板+数据--->页面
        js代码--->机器码\字节码
    2.移植性
        js引擎套一个壳子就是浏览器,写js代码传给js引擎,可以操作硬件,这一套技术就构成了node.js
        node.js使用v8引擎去解析js(不在需要去考虑兼容性问题了)

7.JavaScript只可以运行在浏览器中吗?

JavaScript的实现方式

浏览器 JavaScript实现方式
Firefox SpiderMoney
IE JScript
Safari JavaScriptCore
Chrome V8
Microsoft Edge ChakraCore

什么是 Node?

1.Node.js是一个在浏览器之外可以解析和执行JavaScript代码的运行时环境,或者说是一个运行时平台JavaScript是门语言,node是一门技术;
2.Node.js的特性:无阻塞IO模型、事件驱动;
3.Node.js通常用来构建提供实时服务的应用程序。
1.可以在服务器端使用JavaScript了
2.统一了开发环境和语言,JavaScript无处不在
3.高性能的JavaScript引擎 – Google V8
4.诞生于2009年,由Ryan Dasl 发布,并且是开源的
5.Node.js同时支持Windows、Linux、Mac OSX

为甚嚒要学习node

Node 的实现结构

安装与配置

3m安装法 nvm npm nrm

安装包的方式安装

nvm 安装和管理我们的 Node.js版本

nvm的安装方式,node.js version manager 是一个node的版本管理工具
为了解决node版本切换问题
右键在此电脑上点击一下--》属性---》系统---》高级系统设置---》环境变量
控制面板---》系统---》高级系统设置---》环境变量
NVM_HOME---C:\dev\nvm
NVM_SYMLINK--C:\dev\nodejs
新建一个path:%NVM_HOME%;%NVM_SYMLINK%
nvm 用法
nvm list 查看版本号
nvm use 版本号、nvm use 版本号 32 用哪个版本(已经下载过的版本)
nvm install 版本号、nvm install 版本号 32 下载相对应版本

nvm下载的是二进制版本

控制台基本使用

基本命令 说明
dir directory列出当前目录下所有的条目,别名 ls 在 powershell 中可以使用
cd change directory 切换目录
mkdir、md make directory创建一个文件夹
rd remove directory删除文件夹
del delete删除指定文件夹
ren rename改变文件名
cls clear screen清屏

path 环境变量

REPL(Read-eval-print-loop) 运行环境

用node执行js文件

Globals

global

console(测试用)

断言
console.assert(条件,条件不成立输出的内容);
var foo=3;
console.assert(foo==3,"失败");
time()、timeEnd()
console.time('test');
    //code
console.timeEnd('test');
//参数帮我们记录代码的执行时间

__dirname 和 __filename

process

指令 说明
process.version 取版Node的版本,比如v0.10.18
process.stdout.write(123123) 在控制台做标准输出
process.pid 当前进程的进程号
process.platform 当前系统平台,比如Linux
process.env 指向当前shell的环境变量,比如process.env.HOME
process.stdout 指向标准输出
process.stdin 指向标准输入
process.stderr 指向标准错误

fast-init

补充angular知识

  • 父控制器向子控制器传值(内容),使用$scope.broadcast("事件名","内容");

模块系统

node.js模块化

一个js文件在node里面我们就理解为一个模块;
require用来加载模块;(都要使用相对路径)
module.exports用来曝露属性和方法的,因为模块有封装性,需要打破封装性曝露方法和属性来;
exports是module.exports的别名,exports可以做的事情,module.exports都可以做,exports只能用.的形式曝露属性和方法。

模块的种类

第一类,核心模块(原生模块),node自带,用`名称`直接可以加载。
    核心模块:
     fs:file system
        异步读文件:readFile(路径,编码,function(){});
        同步读文件:readFileSync(路径,编码格式);
     http
     os
     path
     querystring
     url
     ...
第二类,文件模块,用路径加载;有一种特殊的文件模块----->包,`可以用名字加载`。

2.2 优先从缓存加载

common.js规范----->加载后,再次加载时,去缓存中取 module.exports

2.3 require参数解析

核心模块是Node.js原生提供的加载核心模块的时候,
不需要传入路径,因为Node.js已经将核心模块的文件代码
编译到了二进制的可执行文件中了
在加载的过程中,原生的核心模块的优先级是是最高的

图参数解析

1.在Linux或者MAc的操作系统中,/表示系统的根路径
2.在Windows中,/表示当前文件模块所属的根磁盘路径
3.不建议使用,了解
require不包含扩展名的时候,Node.js会按照
路径.js     以后自己在加载js文件模块的时候,就省略掉.js后缀就可以了
路径.node   后缀为node的文件是c/c++写的一些扩展模块
路径.json   如果是加载json文件模块,最好加上后缀.json,能稍微的提高一点加载的速度

.json文件最终Node.js也是通过fs读文件的形式读取出来的,然后通过JSON.parse()转换成一个对象

Node.js会通过同步阻塞的方式看这个路径是否存在
依次尝试,直到找到为止,
如果找不到,报错
直接写包名,先在包内的node_modules,
目录下查找,去父级目录下的node_modules目录下查找,如果找到就直接使用;否则
依次向上查找,直到根目录。

参考文献

3.包

3.1 包的组成

包结构:
package.json的创建
package.json

npm的基本使用

npm 这种东西的最终的目的就是:让你的开发模式工程化,都依靠工具来管理

nvm npm nrm

3m

   nvm node版本的管理工具
   npm node的包管理工具
   nrm npm的数据源管理工具

   npm install -g nrm

4.文件操作

4.1箭头函数(ES6语法)

var foo=function(v){ return v;}
//改写为箭头函数
var foo=v=>v;
var foo=function(){ return v;}
var foo=()=>v;
var foo=function(v1,v2){ return v1+v2;}
var foo=(v1,v2)=>v1+v2;
var foo=function(v1,v2){
    console.log(v1); console.log(v2);
}
var foo=(v1,v2)=>{
    console.log(v1); console.log(v2);
};

4.2文件读写

fs.readFile(file, [options], callback)
//file 读文件的路径
//options 用[]包裹的可选参数,object {"encoding":"uft8","flag":"r"} string 'utf8'
//callback function callback函数里面有两个参数
//err表示错误对象,如果readFile发生错误了,在callback函数里面会回返回err,err对象里面存着错误信息
//如何读文件成功,err为null
//data就是读文件,读出来的内容。

其它

作业

2.npm 和package.json结合着连
npm init 初始化package.json
npm install 先配置package.json里的devDependencies dependencies字段
npm i -S +包名 npm install –save 不光能下载包,还能把依赖添加到package.json
npm i -D +包名 npm install –save-dev 不光能下载包,还能把依赖添加到package.json
npm docs 包名 查看包的相关文件 jquery、mongoose、http-poster
npm list 当前目录有什么包,检测node_modules里面有什么
npm install –g 包名 全局安装 cnpm、nrm
3.cnpm
4.nrm
安装目录npm install -g nrm
nrm ls 查看数据源
nrm test 测试你的网连那个npm的数据源快
nrm use 切换数据源
5.阅读参考文献 朴灵 require
阅读参考文献 package.json全字段解析
6.github自己玩玩

上一篇下一篇

猜你喜欢

热点阅读