zoukankan      html  css  js  c++  java
  • 《深入浅出Nodejs》笔记——模块机制(2)

    前言

    书上还有很大一部分讲了C/C++模块的编译过程、核心模块编写和C/C++扩展模块的内容,不过我对C++一窍不通因此没有仔细看,如果以后需要再自习看吧。

    包与NPM

    第三方模块中,模块和模块之间是散列在各地的,互相之间不能直接引用。而在模块之外,包和NPM则是将模块联系起来的一种机制。
    CommonJS的包规范定义其实也十分简单,它由包结构和包描述文件两个部分组成,前者用于组织包中的各种文件,后者用于描述包的相关信息,以供外部读取分析。

    包结构

    包实际上是一个存档文件,即一个目录直接打包为.zip或tar.gz格式的文件,安装后解压还原为目录,完全符合CommonJS规范的包结构应该包含如下这些文件:

    • package.json 包描述文件
    • bin 存放可执行二进制文件
    • lib 存放js代码
    • doc 存放文档
    • test 存放单元测试用例代码

    包描述文件与NPM

    包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件——package.json,位于包的根目录下。文件中的字段就不放上来了(字太多了);

    NPM常用功能

    1.查看帮助

    安装Node之后,执行npm -v可以查看当前NPM版本:
    npm-v

    执行NPM查看帮助引导说明:
    npm

    使用npm help <command>可以查看具体命令说明,执行命令后会在浏览器打开一个说明文档。

    2.安装系统依赖包

    安装系统依赖包是NPM最常见的用法,它的执行语句是npm install <packageName>。执行命令后Node会在当前目录下创建node_modules目录(如果当前目录下不存在这个目录),然后在node_modules中创建对应包名的目录,然后将压缩包解压到这个目录下。安装好依赖包后就可以通过require(<packageName>)来引入包。

    全局模式安装

    如果包中含有命令行工具,那么需要执行npm install <packageName> -g来进行全局模式安装。

    全局模式这个称谓具有误导性,全局模式安装并不是将一个模块包安装为一个全局包,它并不意味着可以从任何地方用require()引用到这个模块。它实际上是将一个包安装位全局可用的可执行命令,它根据包描述文件中的bin字段配置,将实际脚本链接带与Node执行文件相同的路径下。

    通过全局模式安装的包都被安装进了一个同一目录下,这个目录可以用如下方式推算出来:

    path.resolve(process.execPath, '..', '..', 'lib', 'node_modules');
    

    从本地安装

    对于一些没有发布到NPM上或者因为网络原因没下载的包,可以通过将包下载到本地,然后以本地安装。本地安装只需为NPM指明package.json文件所在的位置即可:它可以是一个包含package.json的存档文件,也可以是一个URL地址,也可以是一个目录下有package.json文件的目录位置:

    npm install <tarball file>
    npm install <tarball url>
    npm install <folder>
    
    从非官方源安装

    如果不能通过官方源安装,可以通过镜像源安装。在执行命令时,添加--registry=http://registry.url即可,示例如下:

    npm install underscore --registry=http://registry
    

    可以指定默认源:

    npm config set registry http://registry.url
    

    3.NPM钩子命令

    4.发布包

    编写模块
    //hello.js
    exports.sayHello = function () {
        return 'Hello, world.';
    }
    
    初始化包描述文件

    可以在包目录下使用npm init来生成package.json文件:

    注册包仓库帐号

    执行npm adduser然后按顺序进行即可。

    上传包

    在package.json文件所在目录下,执行npm publish

    安装包

    执行npm install <packageName> --registry=https://registry.npmjs.org/

    管理包权限
    npm owner ls <packageName>
    npm owner add <user> <packageName>
    npm owner rm <user> <pacjageName>
    
    分析包

    npm ls可以列出当前路径下能够通过模块路径找到的所有包,并生成依赖树:

    局域NPM

    NPM潜在问题

    前后端共用模块

  • 相关阅读:
    在html5中不支持<table>的cellpadding 和 cellspacing ; 2) 如何用css实现 cellpadding, cellspacing ; 3) tr , th 是 有 border, 没有 padding 的.
    css 实现 左右div 等高, 同时父级div就是最高的子div的高度.
    1)jquery validate 远程验证remote,自定义验证 , 手机号验证 2)bootstrap validate 远程remote验证的方法.
    点击图片或者鼠标放上hover .图片变大. 1)可以使用css中的transition, transform 2) 预先设置一个 弹出div. 3)弹出层 alert ; 4) 浏览器的宽度document.documentElement.clientWidth || document.body.clientWidth
    [上一个][下一个][上一节][下一节]
    点击li ,父辈出现; 子级,子辈不出现. prevUntil ---> 前面多个, 截止到 截止元素 , prev([expr]) --> 前面一个.
    通过 onclick = "test()"事件定义的事件 , 如何触发.
    在 子 iframe中 点击一个按钮, 变换 这个 iframe的地址url.
    ueditor 设置高度height. ue.setHeight(400); 设置宽度 width
    Yarn--集群资源管理器--总结
  • 原文地址:https://www.cnblogs.com/FJH1994/p/5865024.html
Copyright © 2011-2022 走看看