美文网首页
关于Node.js 你真的明白了什么是包(Packages)和M

关于Node.js 你真的明白了什么是包(Packages)和M

作者: 渭小粉 | 来源:发表于2018-12-12 10:19 被阅读0次

    Node.js 和 npm 对于包和模块的定义,都有非常明确的定义,然后都是非常的容易造成混淆的。下面就来慢慢解释下。

    摘要(Quick Summary)

    包(package):package是一个使用package.json文件描述的文件或目录。

    模块(Module):模块是任何的文件或目录可以被Node.js's的require().此外,几个配置文件允许这样发生 。

    什么是package?可以是如下:

    a) 一个目录包含一个程序,由package.json

    b) 一个gzipped tarball(打包工具)包含(a)

    c) 一个url处理(b)

    d) 在(c)注册的账户,被发布的包<name>@<version>

    e) A <name>@<tag> 指向(d)

    f) 一个 <name> 有一个最新的标签满足(e)

    g) 一个git url,当克隆的时候,会生成一个如下的包

    注意所有这些包的可能性,即使你从来没有发布你的包到公共注册信息当中。你仍然会从npm中得到很多好处

            - 如果你仅仅想写一个node程序

            - 如果你想要能够在打包后轻易的安装

    git url 将会使下列格式之一

    git://github.com/user/project.git#commit-ish

    git+ssh://user@hostname:project.git#commit-ish

    git+http://user@hostname/project/blah.git#commit-ish

    git+https://user@hostname/project/blah.git#commit-ish

    The commit-ish can be any tag, sha, or branch which can be supplied as an argument to git checkout. The default is master.

    什么是一个模块?

    模块是一个可以在Node.js被require()加载的程序。如下是所有的例子:

       1. 一个文件夹包含一个package.json 文件,并且package.json包含一个main字段

        2. 一个包含index.js的文件夹

        3. 一个Javascript文件

    Most npm packages are modules

    一般来说,npm包被用于Node.js程序当中,通过require()来加载,来使他们变成模块。可是,没有必要说一个npm package就是一个模块

    一些包像:cli packages,仅仅包含可执行的命令行接口也并不包含用于Node.js程序的main字段。那么这些包就不是模块。

    几乎所有的npm package都包含多个模块(因为每个通过require()加载的文件都是一个模块)

    在Node程序的环境当中,模块也是可以从文件当中加载的:

    var req = require( 'request' ); // req关联模块request

    在Node.js中的文件和目录命令以及npm生态系统

    所以,为什么是node_modules文件夹,而package.json文件呢?为什么不是node_packages或者module.json呢?

    package.json文件定义package

    目录node_modules文件夹是Node.js寻找模块的地方。

    比如:你创建了一个node_modules/foo.js,然后有一个程序有这样一段代码:var f = require( "foo.js");, 那么它就会加载这个模块。可是,foo.js不是一个包因为它没有一个package.json的文件

    另一种情况是,如果你创建一个没有index.js文件的包,或者package.json文件没有main字段,那么这就不是一个模块。即使它被安装在node_modules当中,也不能被require()加载

    相关文章

      网友评论

          本文标题:关于Node.js 你真的明白了什么是包(Packages)和M

          本文链接:https://www.haomeiwen.com/subject/odhuhqtx.html