nodeJS---模块与npm包管理工具

一:从模块外部访问另一个模块内的成员;

假如我现在还在D盘中的node文件夹内中的app.js代码改成如下:

var msg = 'hello';

var funName = function(){

return 1;

}

exports.msg = msg;

exports.funName = funName;

使用exports对象将模块中的成员对外可以访问,之后我在同目录下新建app2.js,来调用app.js内的成员msg和funName函数,如下代码:

var foo = require('./app');

console.log(foo.msg);

console.log(foo.funName());

运行如下所示:

即可看出可以在模块A内调用模块B的成员,只需要使用exports对象即可。

那么现在假如模块是一个类的话(在javascript叫构造函数),比如现在app.js代码改成如下的:

function App(name,age){
this.name = name;
this.age = age;
}
App.prototype = {
setName: function(name){
this.name = name;
},
getName: function(){
return this.name;
}
}
exports.App = App;

还是使用exports.App导出类的话,就会报错,我们现在在app2.js调用如下:

var foo = require('./app');
var myFoo = new foo("longen",'28');
console.log(myFoo.getName());

就会报错,如下所示:

但是呢 如果我们在app.js内使用module.exports导出的话。就ok了,exports是module的一个属性。app.js代码改成如下:

function App(name,age){
this.name = name;
this.age = age;
}
App.prototype = {
setName: function(name){
this.name = name;
},
getName: function(){
return this.name;
}
}
module.exports = App;

接着运行app2.js代码如下所示:

可以执行了;

二:组织与管理模块

如何加载一个模块的基本知识点,这里先略,如果想要更详细的了解的话,可以看看朴灵写的深入浅出的nodejs,那边书的理论很详细;

1. 模块对象的属性

在模块文件内部,可以访问当前模块的如下所示的一些属性;

module.id: 属性值为当前模块的ID。在默认情况下,主模块的ID属性值为”.” 其他模块的ID属性值为该模块文件的绝对路径,在模块文件中可以修改当前模块的ID属性值。

如下app.js代码改成如下:

console.log(module.id);

module.id = "longen2";

console.log(module.id);

在app2.js中调用var foo = require('./app'); 然后执行如下:

可以看到module.id改为longen2;

Module.filename: 属性值为当前模块文件的文件名;现在我们把foo.js改成如下:console.log(module.filename);

app2.js不变,直接调用,运行如下:

module.loaded: 属性值为布尔值,当属性值为false时表示模块尚未加载完毕,属性值为true时表示模块加载完毕。下面是app.js改成如下:

console.log(module.loaded);

继续执行如下所示:

module.parent: 属性值为当前模块的父模块对象,即调用当前模块的模块对象,现在foo.js改为如下:

function App(name,age){
this.name = name;
this.age = age;
}
App.prototype = {
setName: function(name){
this.name = name;
},
getName: function(){
return this.name;
}
}
module.exports = App;
console.log(module.parent);

继续调用app2.js,打印如下:

module.children: 属性值为一个数组,其中存放了当前模块的所有子模块对象,即当前模块中已加载的所有模块对象。如上图所示

三:包与npm包管理工具。

在nodejs中,可以通过包来对一组具有相互依赖关系的模块进行统一管理。一个包其实就是一个目录,其中包含了用于对包进行描述的JSON格式的package.json文件,在一个包中,通常包含如下所示的内容:

1)   在包的根目录存放package.json文件。

2)   在bin子目录中存放二进制文件。

3)   在lib子目录中存放javascript文件。

4)   在doc子目录存放对包和包的使用方法进行说明的文档。

5)   在test子目录中存放一些对包进行单元测试的测试用例。

在一个package.json文件中,一个package.json文件中通常应该包含如下字段,下面分别对这些字段进行说明如下:

1)   name, 包名。包名是唯一的,由小写字母,数字和下划线组成,不能包含空格。

2)   preferglobal, 是否支持全局安装。字段值为true是支持全局安装,为false时不支持全局安装。

3)   description, 包说明。对包进行简要概述.

4)   vrsion, 版本号。

5)   author 作者信息数组。每个数组元素中可包含name(作者姓名)字段,email(作者e-mail),web(作者网址)字段。

6)   maintainers, 包维护者信息数组。每个数组元素中可包含name(包维护者的姓名)字段,email(包维护者Email)字段,web(包维护者的网址)字段。

7)   bugs, bug的提交地址,可以是网址或电子邮件。

8)   licenses. 许可证数组。每个元素要包含type(许可证名称)和url(链接到许可证文本的地址)字段。

9)   repository, 仓库托管地址数组。每个元素要包含type(仓库类型,如Git),url(仓库地址)和path(相对于仓库的路径,可选)字段。

10)keywords, 关键字数组,通常用于搜索。

11)dependencies, 本包所依赖的包。是一个关联的数组,有包名和版本号组成。

下面我们来看看如何在项目的根目录下创建一个package.json,当然我们可以手动创建package.json,我们也可以进入我们的项目的根目录后,使用命令窗口来创建,如下我现在还是使用我们node文件夹作为包目录。下面我们先进入node包内,然后执行 命令 npm init;

之后在我node目录下生成一个package.json,内容如下:

{
"name": "bag",
"version": "0.0.1",
"description": "\"A simple demo\"",
"main": "app.js",
"scripts": {
"test": "\"a demo\""
},
"repository": {
"type": "git",
"url": "https:github.com/tugenhua0707"
},
"keywords": [
"[\"longen\"]"
],
"author": "longen",
"license": "BAT"
}

当然还有一些依赖包,我们需要的时候可以手动加进去。

现在我们先来看看如何发布包了;

一:我们在F盘目录下新建一个包名为publicbag,包名尽量不要取名和node或者javascript有关的名字,然后把app.js和package.json复制到该文件夹内,package中的包名改成 publicbag了;现在我们先进入包publicbag内 执行命令安装express依赖包,需要生成node_module目录;如下:

npm   install  express

就在publicbag包内生存文件node_module文件了,如下:

我们也可以全局安装,如下:

npm install express –g

可以看到如上的路径,安装到npm的路径下了。

一:下面我们可以来看看如何使用npm打包发布nodejs程序包了;

  1. 首先在npmjs.org注册一个账号,如下:

https://www.npmjs.org/signup

2. 通过npm adduser来注册新账号或登录老账号:

如下所示:

3. 通过命令 npm publish . 发布包了,如下所示:

我们可以登录npm查看已经发布的包,如下:

可以看到publicbag是我们刚刚发布的包~。

二:如何下载我们刚刚发布的包?

下面我们还是进入F盘后,新建文件夹loadBag文件,然后进入命令行窗口后,进入loadBag文件内,使用命令 npm install publicbag 即可把publicbag包下载到loadBag文件内,如下所示:

然后在loadBag文件内生存包publicbag,如下所示:

当然我们也可以全局下载安装;npm install publicbag –g 如下:

就自动下载到我们npm安装包路径下了;

npm 包管理工具;

在node.js中,提供了一个npm包管理工具,该管理工具可用第三方网站上下载node.js包。我们可以在命令行中,通过不同的命令输入以执行npm包管理工具中的各种功能。

  1. 可以通过如下所示的命令来卸载命令行提示窗口当前目录下安装的某个包:

npm  uninstall <包名>

2. 可以通过如下所示的命令来卸载Node.js的全局包的安装路径下的安装的某个包。

npm  uninstall  -g  <包名>

3. 可以通过如下所示的命令来更新命令行提示窗口当前目录下安装的某个包。

npm  update <包名>

4. 可以通过如下所示的命令来更新Node.js的全局包的安装路径下安装的某个包。

npm update –g <包名>

5. 可以通过如下所示的命令来更新命令行提示窗口当前目录下安装的所有包。

npm update

6. 可以通过如下所示的命令来更新Node.js的全局包的安装路径下安装所有包。

npm update -g

nodeJS---模块与npm包管理工具的更多相关文章

  1. Node.js权威指南 (4) - 模块与npm包管理工具

    4.1 核心模块与文件模块 / 574.2 从模块外部访问模块内的成员 / 58 4.2.1 使用exports对象 / 58 4.2.2 将模块定义为类 / 58 4.2.3 为模块类定义类变量或类 ...

  2. NodeJS 中npm包管理工具

    NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从 ...

  3. Nodejs-内置核心模块&npm包管理工具

    1.核心模块的意义 如果只是在服务器运行JavaScript代码,其实意义不大(浏览器就可以解决)因为无法实现功能(读写文件,访问网络) Node的用处在于本身还提供了一系列的功能模块,用于与操作系统 ...

  4. NPM 包管理工具详解,使用教程

    NPM 包管理工具 1.1 定义:什么是 NPM NPM 全称 Node Package Manager,它是 JavaScript 的包管理工具, 并且是 Node.js 平台的默认包管理工具.通过 ...

  5. node.js中npm包管理工具

    现在安装node.js,默认就会帮我们装上了npm包管理工具,npm主要用来下载,安装,管理第三方模块. 创建一个包描述文件: npm init [-y] 查看包的信息 npm info <pa ...

  6. Node.js之包与npm包管理工具

    Node.js之包与npm包管理工具 1.Node.js中的包 1.1在一个包中包含如下内容: package.json:对包进行描述 在bin子目录中存放二进制文件 在lib子目录中存放JavaSc ...

  7. npm包管理工具在一般项目中的应用方法

    最近自己在有时间,在通学一些知识点,记录一下,以便以后使用方面 当我们在做项目的时候,如果需要到包管理工具,那么我们一定会经历以下流程: 1.首先在官网下载node.js,然后默认安装到C盘 检查是否 ...

  8. node.js开发 npm包管理工具

    npm介绍 说明:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等) 使用npm安装插件:命令提示符执行npm instal ...

  9. npm 包管理工具

    能注册后看简单的功能 订单加信息 下单之前的判断要配合海潮的迁移数据 运行自定义的脚本 在 package.json 的 scripts 里添加自定义的结点 ( 比如 CSOR-serve ) &qu ...

随机推荐

  1. Java - HashMap 多线程安全解析

    HashMap多线程并发问题分析 多线程put后可能导致get死循环 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题.后来,我们的程序性能有问 ...

  2. Android Interpolator(插值器)

    1.概述 插值器定义如何计算动画中的特定值作为时间的函数.例如,指定动画在整个动画中线性发生,这意味着动画在整个时间内均匀移动,或者指定动画以使用非线性时间,例如,在开始或结束时使用加速或减速动画. ...

  3. 【 js 基础 】【读书笔记】关于this

    this 关键字是 Javascript 中很特别的一个关键字,被自动定义在所有函数的作用域中.this提供了一种更优雅的方式隐式“传递”一个对象的引用.今天就来说说 this 的指向问题. this ...

  4. 【代码笔记】iOS-UIAlertView自动关闭

    一,效果图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...

  5. ActiveReports 报表控件V12新特性 -- 无需ETL处理,即可实现跨数据源分析数据

    ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...

  6. ionic安卓tab栏跑到顶部

    安卓下的ionic的tab会在顶部显示,而不是在底部 解决办法如下: 在app.js文件中的.config代码块里中添加以下代码: 注意依赖注入$ionicConfigProvider $ionicC ...

  7. [Android] 锁定屏幕

    最近玩的比较欢脱,欠了好多东西没写.今天先简单地补一篇简单的内容.就是最近涉及到一个锁定Android设备屏幕的设计,大概就是通过一个按钮或者服务消息,来控制设备界面完全锁定,不能点击任何东西.感觉上 ...

  8. Todolist分别用React与Vue的实现与思考

    源码查看: React 版的TodoList=> 点击跳转 Vue 版的TodoList=> 点击跳转 用React实现的思路: React使用注重的思想是少用state,纯函数实现功能思 ...

  9. MySQL——索引实现原理

    在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式. MyISAM索引实现 MyISAM引擎使用B+Tr ...

  10. Pytest+Allure环境的搭建

    参考博客 测试报告解释 pytest+allurre进阶 1. pytest的安装: 1.1. windows下: pip install pytest 1.2. linux下: pip instal ...