zoukankan      html  css  js  c++  java
  • npm 与 package.json 快速入门教程

    转自:https://blog.csdn.net/u011240877/article/details/76582670

    npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解了一些,这次结合官方文章总结一下,加深下理解吧!

    1. 什么是 npm?
    官方文档中对它的介绍是:

    npm makes it easy for JavaScript developers to share and reuse code, and it makes it easy to update the code that you’re sharing.

    即: npm 是一个包管理器,它让 JavaScript 开发者分享、复用代码更方便(有点 maven 的感觉哈)。

    在程序开发中我们常常需要依赖别人提供的框架,写 JS 也不例外。这些可以重复的框架代码被称作包(package)或者模块(module),一个包可以是一个文件夹里放着几个文件,同时有一个叫做 package.json 的文件。

    一个网站里通常有几十甚至上百个 package,分散在各处,通常会将这些包按照各自的功能进行划分(类似我们安卓开发中的划分子模块),但是如果重复造一些轮子,不如上传到一个公共平台,让更多的人一起使用、参与这个特定功能的模块。

    而 npm 的作用就是让我们发布、下载一些 JS 轮子更加方便。
    我们可以去官方网站 https://www.npmjs.com/ 浏览、搜索想要的轮子,也可以直接在命令行中 search 一下意中轮。
    使用 npm 后我们可以非常方便地查看依赖的轮子是否有更新、是否需要下载新版本。

    现在我们知道 npm 是干什么的了。当人们说起 “npm” 时,可能在说三个东西:

    •     一个网站,就是前面提到用于搜索 JS 模块的网站:https://www.npmjs.com/
    •     一个仓库,保存着人们分享的 JS 模块的大数据库
    •     命令行里的客户端,开发者使用它来管理、安装、发布模块

    只要开发者发布某个模块到仓库中,其他人就可以从 npm 网站或者命令行中下载、使用它了!

    2. 安装 npm
    npm 是依附于 node.js 的,我们可以去它的官网 https://nodejs.org/en/download/ 下载安装 node.js。
    下载好 node.js, npm 也就有了,使用 npm -v 查看安装的 npm 版本:

    zhangshixin$ node -v
    v6.10.0

    3. 更新 npm
    npm 更新地可比 node 勤快多了,因此你下载的 node 附带的 npm 版本可能不是最新的,你可以使用如下命令下载最新 npm:

    npm install npm@latest -g

    其中 install 不用介绍了,就是安装,后面的 npm@latest 就是 <packageName>@<version> 的格式,我们在下载其他模块时也是这个格式。-g 代表全局安装。

    4. package.json 文件
        package.json 文件非常重要,因此需要单独一小节介绍。
    管理本地安装 npm 包的最好方式就是创建 package.json 文件。
    一个 package.json 文件可以有以下几点作用:

    •     作为一个描述文件,描述了你的项目依赖哪些包
    •     允许我们使用 “语义化版本规则”(后面介绍)指明你项目依赖包的版本
    •     让你的构建更好地与其他开发者分享,便于重复使用


    4.1 package.json 如何创建
    使用 npm init 即可在当前目录创建一个 package.json 文件:

    4.2 package.json 的内容
    package.json 文件至少要有两部分内容:

    •     “name”

            全部小写,没有空格,可以使用下划线或者横线

    •     “version”

            x.x.x 的格式
            符合“语义化版本规则”

    比如:

    {
      "name": "shixinzhang-demo-package",
      "version": "1.0.0"
    }

    其他内容:
        description:描述信息,有助于搜索
        main: 入口文件,一般都是 index.js
        scripts:支持的脚本,默认是一个空的 test
        keywords:关键字,有助于在人们使用 npm search 搜索时发现你的项目
        author:作者信息
        license:默认是 MIT
        bugs:当前项目的一些错误信息,如果有的话

    我们可以为 init 命令设置一些默认值,比如:

    > npm set init.author.email "shixinzhang2016@gmail.com"
    > npm set init.author.name "shixinzhang"
    > npm set init.license "MIT"

        注意:
        如果 package.json 中没有 description 信息,npm 使用项目中的 README.md 的第一行作为描述信息。这个描述信息有助于别人搜索你的项目,因此建议好好写 description 信息。

    4.3 指定依赖的包
    我们需要在 package.json 文件中指定项目依赖的包,这样别人在拿到这个项目时才可以使用 npm install 下载。
    包有两种依赖方式:

    •     dependencies:在生产环境中需要用到的依赖
    •     devDependencies:在开发、测试环境中用到的依赖


    举个例子:

    {
        "name": "my-weex-demo",
        "version": "1.0.0",
        "description": "a weex project",
        "main": "index.js",
        "scripts": {
            "build": "weex-builder src dist",
            "build_plugin": "webpack --config ./tools/webpack.config.plugin.js --color",
            "dev": "weex-builder src dist -w",
            "serve": "serve -p 8080"
        },
        "keywords": [
            "weex"
        ],
        "author": "fkysly@gmail.com",
        "license": "MIT",
        "devDependencies": {
            "babel-core": "^6.14.0",
            "babel-loader": "^6.2.5",
            "babel-preset-es2015": "^6.18.0",
            "vue-loader": "^10.0.2",
            "eslint": "^3.5.0",
            "serve": "^1.4.0",
            "webpack": "^1.13.2",
            "weex-loader": "^0.3.3",
            "weex-builder": "^0.2.6"
        },
        "dependencies": {
            "weex-html5": "^0.3.2",
            "weex-components": "*"
        }
    }
    View Code

    5. Semantic versioning(语义化版本规则)
    https://docs.npmjs.com/getting-started/semantic-versioning

    dependencies 的内容,以 "weex-html5": "^0.3.2" 为例,我们知道 key 是依赖的包名称,value 是这个包的版本。那版本前面的 ^ 或者版本直接是一个 * 是什么意思呢?
    这就是 npm 的 “Semantic versioning”,简称”Semver”,中文含义即“语义化版本规则”。
    在安卓开发中我们有过这样的经验:有时候依赖的包升级后大改版,之前提供的接口不见了,这对使用者的项目可能造成极大的影响。
    因此我们在声明对某个包的依赖时需要指明是否允许 update 到新版本,什么情况下允许更新。
    这就需要先了解 npm 包提供者应该注意的版本号规范。

    如果一个项目打算与别人分享,应该从 1.0.0 版本开始。以后要升级版本应该遵循以下标准:

    •     补丁版本:解决了 Bug 或者一些较小的更改,增加最后一位数字,比如 1.0.1
    •     小版本:增加了新特性,同时不会影响之前的版本,增加中间一位数字,比如 1.1.0
    •     大版本:大改版,无法兼容之前的,增加第一位数字,比如 2.0.0


    了解了提供者的版本规范后, npm 包使用者就可以针对自己的需要填写依赖包的版本规则。
    作为使用者,我们可以在 package.json 文件中写明我们可以接受这个包的更新程度(假设当前依赖的是 1.0.4 版本):
        如果只打算接受补丁版本的更新(也就是最后一位的改变),就可以这么写:

    •         1.0
    •         1.0.x
    •         ~1.0.4

        如果接受小版本的更新(第二位的改变),就可以这么写:

    •         1
    •         1.x
    •         ^1.0.4

        如果可以接受大版本的更新(自然接受小版本和补丁版本的改变),就可以这么写:

    •         *
    •         x


    小结一下:总共三种版本变化类型,接受依赖包哪种类型的更新,就把版本号准确写到前一位。

    安装 package
    使用 npm 安装 package 有两种方式:本地(当前项目路径)安装 或者 全局安装。
    你选择哪种安装方式取决于你将如何使用这个包:

    •     如果你只是想在当前项目里用 require() 加载使用,那你可以安装到本地

            npm install 默认就是安装到本地的

    •     如果你想要在命令行里直接使用,比如 grunt CLI,就需要安装到全局了

    如果在你的项目里有 package.json 文件,运行 npm install 后它会查找文件中列出的依赖包,然后下载符合语义化版本规则的版本。
    npm install 默认会安装 package.json 中 dependencies 和 devDependencies 里的所有模块。
    如果想只安装 dependencies 中的内容,可以使用 --production 字段:

    npm install --production


    6. 本地安装 package

    npm 使用下面的命令下载一个包:

    npm install <package_name>

    后面就是要安装包的名称。这个命令会在当前目录创建一个 node_modules 目录,然后下载我们指定的包到这个目录中。

  • 相关阅读:
    Mysql必知必会
    KafKa简介和利用docker配置kafka集群及开发环境
    深入理解python
    性能测试报告模板
    Zookeeper的基本原理(zk架构、zk存储结构、watch机制、独立安装zk、集群间同步复制)
    Shell命令和流程控制[linux常用命令的使用]
    Javascrip之BOM
    分布式文件系统HDFS-部署和配置
    分布式计算框架-Spark(spark环境搭建、生态环境、运行架构)
    框架—Mybatis搭建
  • 原文地址:https://www.cnblogs.com/ylz8401/p/11069129.html
Copyright © 2011-2022 走看看