• 《深入浅出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潜在问题

    前后端共用模块

  • 相关阅读:
    yii2 gii 命令行自动生成控制器和模型
    控制器中的方法命名规范
    Vue Property or method "" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based
    IDEA插件:GsonFormat
    Spring Boot : Access denied for user ''@'localhost' (using password: NO)
    Typora添加主题
    Git基础命令图解
    Java Joda-Time 处理时间工具类(JDK1.7以上)
    Java日期工具类(基于JDK1.7版本)
    Oracle SQL Developer 连接Oracle出现【 状态: 失败 -测试失败: ORA-01017: invalid username/password; logon denied】
  • 原文地址:https://www.cnblogs.com/FJH1994/p/5865024.html
Copyright © 2020-2023  润新知