NodeJS旅程 : module 不可忽略的重点

modules

模块的简介

Module 是Node.js中最重要的一个部分也是进行深度开发前的必修课。掌握Module才能真正理解NodeJS的精髓,你会发现从思路上会有极大的扩展。  学会写module就相当于学会了在C#内写类和开发类库一般。

一切从require开始

在nodejs中最常使用的就是 require("模块名") 函数了。require就相当于我们在C#中使用的using关键字,模块相当于某一命名空间下的类库。我们可以通过显式引入或隐式引入两种方式使用require, 先看看这两种方式的区别

var express=require("express");
var router=require("./routers/index");

明显地显式引入只需要模块的名称即可,这要求模块文件处于当前运行目录下的node_modules子目录下且模块需要具有package.json的描述文件。而显式引入则可以存在于项目的任何位置,只需要加入引入路径就可以使用。

显式引入适就于重用度高的模块代码,如果是开源代码的话可直接发布到npm上通过npm命令行在其它的项目中安装引入。如果只存于本地,也可以将其copy至node_modules/[模块名]的目录下,然后加入一个package.json的文件

{
  "name": "[模块名]",
  "description": "模块的描述",
  "main": "./[模块的js文件名].js"
},

这样就可以在实现模块的隐式调用。package.json这个文件大有文章,也是发布至npm上的一个重要的描述文件,对于项目发布会有很大的用处,这里是package.json文件详细说明,如有需要的朋友可以进去详细地了解(英文)。

而对于重用度不高的代码就可以通过相对路径的对文件进入引入,这里值得说明一点的就是路径符号的转义:

"./"  -> 指的是当前文件的所在位置

"../" -> 当前文件的父目录

"/" -> 项目根路径

如果当前模板为执行模块,可通过 __dirname 获得当前项目的执行路径的绝对路径。

如何入手

模块的的制编写其实非常简单,新建一个.js文件,在最后通过module.exports导出一个对象实例,或者是一个类型。

例子1:导出实例

var mymodule= {
   save:function(){
     console.log("Save function call");
   },
   setOption:function() {
      ....
   }
}

module.exports=mymdoule;

调用:

var _m=require("./mymodule");
var _m.save();

这种导出方式直接就是导出mymodule这个实例对象。

例子2:导出类型

var myModule= function() { }

myModule.prototype={
   save:function() {     console.log("Save function call");},    setOption:function() { .... } 
} module.exports=myMdoule;

调用:

var m=require("./mymodule");
var _m=new m();
_m.save();

通过类型引出的方式可以更好地控制对象的作用域,应采用闭包的方式将变量尽可能地封闭在模块自身的作用域内这样不会引起模块间引用的变量污染问题。

在Browser端运行模块

在很多情况下我们会碰到服务端的业务逻辑处理与客户端的处理是一样的,过往由于客户端运行的是javascript而服务端运行的是其它的服务端语言,那么也不得不将业务逻辑重写一次。而nodejs则改变了这一切,我们可以将服务代码加上一点判断就可以将其放罢到浏览器端运行。

如:我当前有一个时间格式化的方法,需要支持客户端的运行与服务端运行一至只需要在module.exports 上加上一小段判断:

var timeUtilty={
   format:function(val) {
     return "Date time format "
  }
}

if (typeof(window)===undefined)
   module.exports=timeUtilty;

这样当我们在开发能支持 application offline功能的模块时就省事多了,只需要有一套代码就能在两个端同时处理了, 赞一个!

推荐阅读

NodeJS旅程 : module 不可忽略的重点

时间: 2024-11-05 21:49:08

NodeJS旅程 : module 不可忽略的重点的相关文章

NodeJS旅程 : express - nodejs MVC 中的王牌

express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs express" 会跑出一大堆关于怎么用开发 express 来开发mvc文章 ,相同的内容在这里我不想重复叙述,关于express的入手文章大家到百度上搜就好了.这只是一篇随笔不是教程, 我是想用ASP.NET MVC与 express 来在他们擅长的方面上做一些比较,从中看看我们作为开发人员能得到什么,哪一

NodeJS旅程 : Less

我一直强调我是个很懒的人,虽然我认为自己是个代码控但不代表我喜欢写大量代码.有做Web前端开发的人一定都接触CSS,由其在当下CSS3更是做出Cool站的必修课.我曾和不少的前端开发讨论过CSS3,我却发现在他们的眼中,CSS3却是一个非常难啃的骨头,平时写CSS3也只能是痛并快乐着.他们人都在说 “能少写一点吗?”  我其实并没有这种感觉,CSS代码量是大,但比起长年写服务端的代码也只不过是一个小部分而已.只是觉得写CSS3总是有一种思路不清晰的感觉,如果写CSS能像写类那样,速度就高了.直到

nodejs 中module.exports 和 exports 区别详细介绍

你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块接下来介绍创建过程,感兴趣的朋友可以参考下 你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例如:(假设这是rocker.js文件)  复制代码代码如下: exports.name = function() { console.log('My name is Lemmy Kilmister'); }; 在另一个文件中你这样引用  复制代码代码如下: var rocker = require(

ES6的export与Nodejs的module.exports

module.exports与exports,export与export default之间的关系和区别 首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念. CommonJS模块规范 Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. CommonJS规范规定,每个模块内部,module变量代表当前模块.这个变量是一个对象,它的expor

理解nodejs的module

module 在 Node.js 模块系统中,每个文件都视为独立的模块,node在运行某个模块儿时会生成一个module对象 Module { id: '.', exports: 2, parent: null, filename: '/Users/leinov/github/node-api/module/module.js', loaded: false, children: [ Module { id: '/Users/leinov/github/node-api/module/circl

nodejs addon/module

http://skitr.com/2014/05/13/debugging-node-js-addons-on-linux-and-mac-osx/ http://adilapapaya.com/docs/node-gyp/#installation https://nodejs.org/docs/latest/api/addons.html http://modernweb.com/2015/03/19/develop-an-ios-application-with-node-js-and-c

ES6的export与Nodejs的module.exports比较

首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念. CommonJS模块规范 Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. CommonJS规范规定,每个模块内部,module变量代表当前模块.这个变量是一个对象,它的exports属性(即module.exports)是对外的接口.加载某个模块,其实是加载该模块的module.ex

nodejs学习资料

NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS

七天学会NodeJS

NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS