什么是NPM

在学Python的时候我们肯定会使用第三方模块或者编写模块供别人使用,我们有一个非常好用的pip来帮我们管理我们的模块包!那么Nodejs重的模块包呢?

对没错就是NPM,他是随同NodeJS一起安装的包管理工具:(和python中的pip类似

  1. 允许用户从NPM服务器下载别人编写的第三方包到本地使用
  2. 允许从用户从NPM服务器下并安装别人编写的命令程序到本地使用
  3. 语序用户辨析自己的包或命令程序到NPM服务器供别人使用

由于新版本的NodeJS已经集成了npm所以我们安装完NodeJS之后可以通过下面的命令去查看npm版本

LuoTimdeMacBook-Pro-2:~ luotim$ npm -v
2.15.1

如果你安装的是旧版本的npm,可以很容易的通过npm去升级

#LuoTimdeMacBook-Pro-2:~ luotim$ sudo npm install npm -g
Password:
Sorry, try again.
Password:
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@3.9.2 /usr/local/lib/node_modules/npm
LuoTimdeMacBook-Pro-2:~ luotim$ npm -v
#3.9.2

使用npm命令安装模块

一、安装命令

npm安装NodeJS模块语法格式如下:

npm install <Module Name>

安装一下NodeJS web框架模块express

sudo npm install express

安装好之后,express包就放在工程目录下面的node_modules目录中了,调用的时候通过require('express')的方式调用。

#在程序中调用

var express = require('express');

二、全局安装与本地安装

本地安装:

npm install express
  1. 将包放在./node_modules下(运行npm install 的目录下),如果没有node_modules目录,会在当前执行npm命令的目录下生成node_modules目录。
  2. 可以通过require()来导入本地安装的模块

全局安装:

npm install express -g
  1. 将安装包放在/usr/local下
  2. 可以直接通过命令行调用
  3. 不能通过require()来导入模块

查看软件包:

#查看本地安装的本地模块要进入到/node_modules/目录下
npm ls

#查看全局安装的模块
npm ls -g

三、package.json

每个模块下面都会有一个package.json文件,我们看下express保重的文件内容,他里面存放了关于这个模块的相关信息

LuoTimdeMacBook-Pro-2:express luotim$ cat package.json
{
  "_args": [
    [
      {
        "name": "express",
        "raw": "express",
        "rawSpec": "",
        "scope": null,
        "spec": "latest",
        "type": "tag"
      },
      "/private/tmp"
    ]
  ],
  "_from": "express@latest",
  "_id": "express@4.13.4",
  "_inCache": true,
  "_installable": true,
  "_location": "/express",
  "_npmUser": {
    "email": "doug@somethingdoug.com",
    "name": "dougwilson"
  },
  "_npmVersion": "1.4.28",
  "_phantomChildren": {},
  "_requested": {
    "name": "express",
    "raw": "express",
    "rawSpec": "",
    "scope": null,
    "spec": "latest",
    "type": "tag"
  },
  "_requiredBy": [
    "#USER"
  ],
  "_resolved": "https://registry.npmjs.org/express/-/express-4.13.4.tgz",
  "_shasum": "3c0b76f3c77590c8345739061ec0bd3ba067ec24",
  "_shrinkwrap": null,
  "_spec": "express",
  "_where": "/private/tmp",
  "author": {
    "email": "tj@vision-media.ca",
    "name": "TJ Holowaychuk"
  },
  "bugs": {
    "url": "https://github.com/expressjs/express/issues"
  },
  "contributors": [
    {
      "email": "aaron.heckmann+github@gmail.com",
      "name": "Aaron Heckmann"
    },
    {
      "email": "ciaranj@gmail.com",
      "name": "Ciaran Jessup"
    },
    {
      "email": "doug@somethingdoug.com",
      "name": "Douglas Christopher Wilson"
    },
    {
      "email": "rauchg@gmail.com",
      "name": "Guillermo Rauch"
    },
    {
      "email": "me@jongleberry.com",
      "name": "Jonathan Ong"
    },
    {
      "email": "shtylman+expressjs@gmail.com",
      "name": "Roman Shtylman"
    },
    {
      "email": "hanul@hanul.me",
      "name": "Young Jae Sim"
    }
  ],
  "dependencies": {
    "accepts": "~1.2.12",
    "array-flatten": "1.1.1",
    "content-disposition": "0.5.1",
    "content-type": "~1.0.1",
    "cookie": "0.1.5",
    "cookie-signature": "1.0.6",
    "debug": "~2.2.0",
    "depd": "~1.1.0",
    "escape-html": "~1.0.3",
    "etag": "~1.7.0",
    "finalhandler": "0.4.1",
    "fresh": "0.3.0",
    "merge-descriptors": "1.0.1",
    "methods": "~1.1.2",
    "on-finished": "~2.3.0",
    "parseurl": "~1.3.1",
    "path-to-regexp": "0.1.7",
    "proxy-addr": "~1.0.10",
    "qs": "4.0.0",
    "range-parser": "~1.0.3",
    "send": "0.13.1",
    "serve-static": "~1.10.2",
    "type-is": "~1.6.6",
    "utils-merge": "1.0.0",
    "vary": "~1.0.1"
  },
  "description": "Fast, unopinionated, minimalist web framework",
  "devDependencies": {
    "after": "0.8.1",
    "body-parser": "~1.14.2",
    "connect-redis": "~2.4.1",
    "cookie-parser": "~1.4.1",
    "cookie-session": "~1.2.0",
    "ejs": "2.3.4",
    "express-session": "~1.13.0",
    "istanbul": "0.4.2",
    "jade": "~1.11.0",
    "marked": "0.3.5",
    "method-override": "~2.3.5",
    "mocha": "2.3.4",
    "morgan": "~1.6.1",
    "multiparty": "~4.1.2",
    "should": "7.1.1",
    "supertest": "1.1.0",
    "vhost": "~3.0.1"
  },
  "directories": {},
  "dist": {
    "shasum": "3c0b76f3c77590c8345739061ec0bd3ba067ec24",
    "tarball": "https://registry.npmjs.org/express/-/express-4.13.4.tgz"
  },
  "engines": {
    "node": ">= 0.10.0"
  },
  "files": [
    "LICENSE",
    "History.md",
    "Readme.md",
    "index.js",
    "lib/"
  ],
  "gitHead": "193bed2649c55c1fd362e46cd4702c773f3e7434",
  "homepage": "https://github.com/expressjs/express",
  "keywords": [
    "express",
    "framework",
    "sinatra",
    "web",
    "rest",
    "restful",
    "router",
    "app",
    "api"
  ],
  "license": "MIT",
  "maintainers": [
    {
      "email": "doug@somethingdoug.com",
      "name": "dougwilson"
    }
  ],
  "name": "express",
  "optionalDependencies": {},
  "readme": "ERROR: No README data found!",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/expressjs/express.git"
  },
  "scripts": {
    "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/",
    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
    "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"
  },
  "version": "4.13.4"
}
LuoTimdeMacBook-Pro-2:express luotim$ 

简单解释:

  • name - 包名。
  • version - 包的版本号。
  • description - 包的描述。
  • homepage - 包的官网 url 。
  • author - 包的作者姓名。
  • contributors - 包的其他贡献者姓名。
  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
  • main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。
  • keywords - 关键字

四、卸载、更新、搜索、创建模块

卸载

npm uninstall express

更新

npm update express

搜索

npm search express

创建模块

NodeJS REPL(交互解释器)

和python的交互解释器类似NodeJS也停工了交互式解释器REPL

一、REPL功能

有下面的功能:

  • 读取用户输入,解析输入了JavaScript数据结构并存储在内存中
  • 执行输入的数据结构
  • 打印结果
  • 循环

直接输入node来启动Node的终端

LuoTimdeMacBook-Pro-2:express luotim$ node
> 

1、表达式运算

LuoTimdeMacBook-Pro-2:express luotim$ node
> 1 + 1
2
> 1 * 5 + 6 / 8
5.75
> 

2、变量

变量声明需要使用var关键字,如果不使用var关键字变量会被打印出来,并且是使用var关键字的变量可以使用console.log()来输出变量

> x = 10
10
> console.log(x)
10
undefined
> var y = 10
undefined
> console.log(y)
10
undefined
> 

3、多行表达式

> var x = 0;
undefined
> do {
... x++;
... console.log('Thes number x now is : ' + x);
... } while (x<6);
Thes number x now is : 1
Thes number x now is : 2
Thes number x now is : 3
Thes number x now is : 4
Thes number x now is : 5
Thes number x now is : 6
undefined
> 

4、下划线变量

可以通过使用下划线‘_'获取表达式的运算结果

> var x = 10
undefined
> var y = 15
undefined
> x + y
25
> var sum = _
undefined
> console.log(sum)
25
undefined
> 

退出REPL

连续两次Ctrl + c 或者Ctrl + D

Node.js之路【第二篇】Nodejs中的pip(NPM)&REPL的更多相关文章

  1. node.js+react全栈实践-Form中按照指定路径上传文件并

    书接上回,讲到“使用同一个新增弹框”中有未解决的问题,比如复杂的字段,文件,图片上传,这一篇就解决文件上传的问题.这里的场景是在新增弹出框中要上传一个图片,并且这个上传组件放在一个Form中,和其他文 ...

  2. 【从零开始学习Node.js】一.在CentOS 7中部署Node.js环境

    一.背景信息 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用来方便快速地搭建易于扩展的网络应用.Node.js使用了一个事件驱动.非阻塞式I/O的模型,使其轻量又高效 ...

  3. 第二篇 Flask 中的 Render Redirect HttpResponse

    第二篇 Flask 中的 Render Redirect HttpResponse   1.Flask中的HTTPResponse 在Flask 中的HttpResponse 在我们看来其实就是直接返 ...

  4. Node.js之路【第三篇】NodeJS异步实现

    NodeJS异步实现 Node.js异步编程的直接体现就是回调,它依托于回调来实现,但不能说使用了回调他就是异步了 回调函数在完成任务后就会被调用,Node使用了大量的回调函数,Node所有的API都 ...

  5. Node.js之路【第一篇】初识Node.js

    什么是Node.js 1.Node.js就是运行在服务端的JavaScrip. 2.Node.js是一个基于Chrome JavaScrip运行时简历的一个平台. 3.Node.js是一个非阻塞I/O ...

  6. 一名全栈工程师Node.js之路-转

    Node.js 全球现状 虽然 Node.js 在国内没有盛行,但据 StackOverflow 2016 年开发者调查,其中 node.js .全栈.JavaScript 相关的技术在多个领域(包括 ...

  7. Node.js 笔记(一) nodejs、npm、express安装

    Windows平台下的node.js安装 直接去nodejs的官网http://nodejs.org/上下载nodejs安装程序,双击安装就可以了 测试安装是否成功: 在命令行输入 node –v 应 ...

  8. Node.js 笔记(一) nodejs、npm、express安装(转)

    转载地址:http://blog.csdn.net/haidaochen/article/details/7257655 Windows平台下的node.js安装 直接去nodejs的官网http:/ ...

  9. Flask最强攻略 - 跟DragonFire学Flask - 第二篇 Flask 中的 Render Redirect HttpResponse

    1.Flask中的HTTPResponse 在Flask 中的HttpResponse 在我们看来其实就是直接返回字符串 2.Flask中的Redirect 每当访问"/redi" ...

随机推荐

  1. css之浮动

    标准文档流 将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流.每个非浮动块级元素都独占一行, 浮动元素则按规定浮在行的一端. 若当前行容不下, 则另起新行再浮动. 标准流的微 ...

  2. 常用ASCII CHR碼對照

    因為開發需求,把對照表留下來一下. Chr(0) Null Chr(29) 分组符 Chr(38) & Chr(48) 0 Chr(8) 退格 Chr(30) 記錄分離符號 Chr(39) ‘ ...

  3. 如何打开、关闭IIS服务器

    问题描述:如题. 使用工具:腾讯云Windows Server 2012 R2 数据中心版 64位中文版. 操作步骤: 1.服务器管理器->IIS

  4. WPF 自定义BarChartControl(可左右滑动的柱状图)

    自定义可左右滑动.拖拽滑动的平面柱状图 在做这种样式控件之前,可先浏览我之前预研的控件: A.自定义左右滑动ScrollViewer(可拖动滑动) B.自定义Bar柱状图 OK,现在说下控件具体设计过 ...

  5. 项目自动化建构工具gradle 入门2——log4j输出helloWorld

    上一章节呢,有一个能跑的程序了.但是对做工程的人来说,用日志输出感觉比用System.out要有档次一点.比如使用log4j.直接上例子: 1进入D:\work\gradle\log目录  ,您电脑没 ...

  6. 搭建php环境哪家强

    http://www.bubuko.com/infodetail-791030.html

  7. [LeetCode] Find K Pairs with Smallest Sums 找和最小的K对数字

    You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...

  8. C#文件目录操作完全手册

    需要 using System.IO; 1) 相对路径转绝对路径string fullfolder = HttpContext.Current.Server.MapPath(folder); 2) 文 ...

  9. simpson

    使用二次函数拟合复杂的连续函数求积分 对于(l,r)拟合的积分为(r-l)*(f(l)+4*f((l+r)/2)+f(r))/6 ___________________________ BZOJ217 ...

  10. RTMP流媒体播放过程

      RTMP协议规定:第一步,建立一个网络连接(NetConnection):客户端和服务端的基础连通关系 第二步:建立一个网络流(NetStream)发送多媒体的通道(只能建立一个网络连接,可以建立 ...