• npm 学习


    原址:阮老师http://www.ruanyifeng.com/blog/2016/01/npm-install.html

    一、npm install


    npm install命令用来安装模块到node_modules目录
    $npm install <packageName>
    安装以前,npm install会先检查,node_modules目录中是否已经存在指定模块。如果存在,就不再重新安装了,即使远程仓库已经有了一个新版本,也不会再安装。
    如果你希望,一个模块不管是否安装过,npm都要强制重新安装,可以使用-f或--force参数
    npm install <packageName> -f

    二、npm update


    如果想更新已经安装的模块,使用npm update命令
    $npm update <packageName>
    它会先到远程仓库查询最新版本,然后查询本地版本。如果本地版本不存在或远程版本较新,就会安装。

    三、registry


    npm update命令怎么知道每个模块的最新版本。是npm模块仓库提供了一个查询服务,叫registry。以npmjs.org为例,它的查询服务网址是https://registry.npmjs.org/。
    这个网址后面跟上模块名,就会得到一个JSON对象,里面是该模块所有版本的信息。

    registry网址的模块名后面,还可以跟上版本号或标签,用来查询那个具体版本的信息。比如,访问https://registry.npmjs.org/react/v0.14.6,就可以看到React的0.14.6版。
    返回的JSON对象里面,有一个dist.tarball属性,是该版本压缩包的网址。
    到这个网址下载压缩包,在本地解压,就得到了模块的远吗。npm install和npm update命令,都是通过这种方式安装模块的。

    四、缓存目录


    npm install或npm update命令,从registry下载压缩包之后,都存放在本地的缓存目录。
    这个缓存目录,在Linux或Mac默认是用户主目录下的.npm目录,在Windows默认是AppData.npm-cache。

    五、模块安装过程


    1.发出npm install命令
    2.npm向registry查询模块压缩包的网址
    3.下载压缩包,存放在/.npm目录
    4.解压压缩包到当前项目的node_modules目录

    注意,一个模块安装以后,本地其实保存了两份。一份是/.npm目录下的压缩包,另一份是node_modules目录下解压后的代码。
    但是,运行npm install的时候,只会检查node_modules目录,不会检查/.npm目录。也就是说,如果一个模块在/.npm下有压缩包,但是没有安装在npm_modules目录中,npm依然会从远程仓库下载一次新的压缩包。

    这种行为固然可以保证总是去的最新的代码,但有时并不是我们想要的。最大的问题是,它会极大地影响安装速度。即使某个模块的压缩包就在缓存目录中,也要去远程仓库下载,这怎么可能不慢呢?

    六、--cache-min参数


    为了解决这些问题,npm提供了一个--cache-min参数,用于从缓存目录安装模块。
    --cache-min参数指定一个时间(单位为分钟),只有超过这个时间的模块,才会从registry下载。
    $npm install --cache-min 99999 <packageName>
    上面命令指定,只有超过99999分钟的模块,才会registry下载。实际上就是指定,所有模块都从缓存安装,这样就大大加快了下载速度。

    它还有另一种写法。
    $npm install --cache-min Infinity <package-name>
    但是,这并不等于离线模式,这时仍然需要网络连接。因为现在的--cache-min实现有一些问题。

    1.如果指定模块不在缓存目录,那么npm会连接registry,下载最新版本。这没有问题,但是如果指定模块在缓存目录中,npm也会连接registry,发出指定模块的etag,服务器返回状态吗304,表示不需要重新下载压缩包。
    2.如果某个模块已经在缓存之中,但是版本低于要求,npm会直接报错,而不是去registry下载最新版本。

  • 相关阅读:
    自定义“浏览文件夹”对话框
    CYABFFW:这是另一个文件夹包装器
    CYABFFW:这是另一个文件夹包装器
    ToDoList样式表:教程
    7.2.23 -一个有效而灵活的方法来掌握你的任务
    使用。net SDK编写位图按钮控件
    在MVC应用程序中使用自动程序进行CRUD操作
    imp
    openpyxl
    fabric
  • 原文地址:https://www.cnblogs.com/beng/p/5593915.html
Copyright © 2020-2023  润新知