• npm与package.json


    【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

    八个方面深度解析前端知识/技能,本篇分享的是:

    【npm与package.json】

    今天给大家分享的内容是,什么是npm与package.json?
    1.背景介绍
    NPM是什么?
    NPM(node package manager),通常称为node包管理器。顾名思义,它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。
    npm的背后,是基于couchdb的一个数据库,详细记录了每个包的信息,包括作者、版本、依赖、授权信息等。它的一个很重要的作用就是:将开发者从繁琐的包管理工作(版本、依赖等)中解放出来,更加专注于功能的开发。

    我们需要了解什么?
    1.npm的安装、卸载、升级、配置
    2.npm的使用:package的安装、卸载、升级、查看、搜索、发布
    3.npm包的安装模式:本地 vs 全局
    4.package.json:包描述信息
    5.package版本:常见版本声明形式

    2.知识剖析
    npm包安装模式:
    node包的安装分两种:本地安装、全局安装。两者的区别如下:
    本地安装:npm install pkg,package会被下载到当前所在目录,也只能在当前目录下使用。
    全局安装:npm install -g pkg,package会被下载到到特定的系统目录下,安装的package能够在所有目录下使用

    通过package.json进行安装:
    如果我们的项目依赖了很多package,一个一个地安装那将是个体力活。我们可以将项目依赖的包都在package.json这个文件里声明,然后一行命令搞定
    npm install

    其他package安装命令
    运行如下命令,列出所有npm install可能的参数形式:

    npm install --help
    npm uninstall pkg:卸载
    npm ls:查看当前目录安装了哪些package
    npm info pkg:查看特定package的详细信息
    npm update pkg:package更新
    npm search pgk:搜索

    NPM配置
    npm的配置工作主要是通过npm config命令,主要包含增、删、改、查几个步骤,下面就以最为常用的proxy配置为例:

    设置proxy:npm set prox
    查看proxy:npm get proxy
    删除proxy:npm delete proxy
    查看所有配置:npm config list
    直接修改配置文件:npm config edit

    3.常见问题
    什么是package.json?

    4.解决方案
    假设当我们下载了node应用,这个node应用依赖于A、B、C三个包,如果没有package.json,我们需要人肉安装这个三个包(如果对版本有特定要求就更悲剧了):

    npm install A
    npm install B
    npm install C

    有了package.json,一行命令安装所有依赖。
    npm install

    5.编码实战
    npm 允许在package.json文件里面,使用scripts字段定义脚本命令。
    "scripts": {"build": "node build.js"}
    上面代码是package.json文件的一个片段,里面的scripts字段是一个对象。它的每一个属性,对应一段脚本。比如,build命令对应的脚本是node build.js.
    命令行下使用npm run命令,就可以执行这段脚本。
    npm run build
    node build.js

    6.扩展思考
    package.json字段简介

    package.json中最重要的属性是name和version两个属性,这两个属性是必须要有的,否则模块就无法被安装,这两个属性一起形成了一个npm模块的唯一标识符。模块中内容变更的同时,模块版本也应该一起变化。

    name属性就是你的模块名称,下面是一些命名规则:
    1.必须小于等于214个字节,包括前缀名称在内(如 x/xmodule)。
    2.name属性会成为模块url、命令行中的一个参数或者一个文件夹名称,任何非url安全的字符在name中都不能使用,也不能以"_"或"."开头,不能含有大写字母
    3.不要使用和node核心模块一样的名称,明早不要含有"js"和"node"。
    4.name属性也许会被写在require()的参数中,所以最好取个简短而语义化的值。
    5.创建一个模块前可以先到https://www.npmjs.com查查name是否已经被占用.

    version:
    package的版本,当package发生变化时,version也应该跟着一起变化,同时,version必须可以被npm依赖的一个node-semver模块解析。

    description:
    package的应用依赖模块,即别人要使用这个package,至少需要安装哪些东东。应用依赖模块会安装到当前模块的node_modules目录下。

    devDependencies:
    package的开发依赖模块,即别人要在这个package上进行开发。

    常见版本声明形式:
    1."~1.2.3" 是神马意思呢:
    "~1.2.3" = ">=1.2.3 <1.3.0"

    2."1.x.x"是什么意思呢:
    "1.2.x" = ">=1.2.0 <1.3.0"

    3.~version "约等于",^version "兼容版本

    7.参考文献
    npm package.json属性详解:http://www.cnblogs.com/tzyy/p/5193811.html

    PPT:http://localhost:63341/PPT/PPT/JS-11-npm%E4%B8%8Epackage.json.html#/
    视频:https://v.qq.com/x/page/w0539du6802.html

    更多内容,可以加入IT交流群565734203与大家一起讨论交流

  • 相关阅读:
    Neural Collaborative Filtering
    Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
    Statistical Comparisons of Classifiers over Multiple Data Sets
    Data Poisoning Attacks on FactorizationBased Collaborative Filtering
    Markov Chain
    Adversarial Personalized Ranking for Recommendation
    常见网络协议
    Python3 JWT的生成与验证
    Python3函数中如何理解递归
    Python3使用re模块解析正则表达式
  • 原文地址:https://www.cnblogs.com/jnshu/p/10178091.html
Copyright © 2020-2023  润新知