• Node.js与npm


    Node.js与npm

    某种层面上来讲, node.js对前端以及JavaScript的影响及其巨大和深远.
    运行在Chrome V8 引擎上. 而这个引擎能够对本地文件进行操作.
    在此之前, 前端代码全都运行在浏览器上.
    这样的情况下,因为同源策略, 前端语言无法对其他文件进行操作. 限制极大.
    而node的出现, 无疑为前端语言增加了很多可能性.

    npm

    npm是node的一个重要组成部分, 是node的包管理工具.
    具有强大的包管理功能.
    虽然在使用的过程中, 时常出现各种问题, 但不得不说. 它已经是目前用的最多的包管理工具.

    配置文件

    配置方面,分内置配置,用户配置, 项目配置
    内置配置的文件, 保存在 %NODE_HOME%/node_modules/npm/.npmrc
    用户配置文件, 保存在 ~/.npmrc
    项目配置文件, 需要放在project/.npmrc

    npm的包管理规则

    在大的方面来讲.
    npm的仓库概念感觉和Maven差不多.

    1. 远程仓库
    2. global全局仓库(本地仓库)
    3. 项目依赖库

    项目目录里面:

    1. package.json
    • 保存了该项目里所有的依赖包的包名信息, 以及版本信息.
    1. package-lock.json
    • 成功执行过一次npm install 命令后会出现, 显示了当前依赖库所采用的具体版本.
    • 当如果包的版本发生变化, 则需要删除该文件, 重新生成.

    构建过程

    当找包的时候会从 项目依赖库 或者 全局仓库里找对应的依赖.
    如果找不到, 才会去远程仓库里面下来拉取.

    在项目编译的时候,npm会先从package.json读取所需要的包内容.
    读取包的名称, 以及对应的版本.
    然后会去找对应的依赖包.
    如果执行的是npm install,则会去项目目录下的node_modules
    如果执行的是npm install -g,则会去设置的node_global里面找.
    当都没有找到的时候, 会去npm设置的远程仓库里面找.

    都没有找到, 则编译失败.

    当找到包的时候, 一般情况下, 会在项目目录下创建node_modules,放置该项目所用的包.

    当执行npm run build的时候, 会执行构建过程.
    当完成编译过程之后, 会在项目目录下生成一个dist目录.里面放置着所有构建完成的内容.

    npm的包管理逻辑

    有时候会吐槽, 哪里都能见到node_modules这个文件夹, 而且占用空间极大.
    npm对包管理方面, 进行了别出心裁的设计.
    虽然使用的时候感觉到十分难用, 但是它的确是解决了不少的依赖, 以及版本问题.

    这方面我的知识还不够深切, 没有能够完全理解npm的包管理规则.有时间再仔细琢磨一下npm的包管理理念.

    调用npm

    通常情况下,我们在实现自动化的时候, 会考虑在.bat或者.sh里面完成大部分的指令.
    然而当我在windows下使用npm进行构建的时候, 经常会发现一个问题.
    在使用.bat执行npm命令的时候. 会导致.bat之后的命令不再执行.
    一直不太清楚是什么原因导致的这个结果.
    但是我一直采用的应对方式是,
    在.bat中用call来调用npm命令
    例如:

    npm install && npm run build
    

    会写为异步调用:

    call npm install && call npm run build
    

    npm源修改

    修改 远程仓库的指向 , 直接修改对应的.npmrc的配置文件即可.
    但有的时候,总是有一些不是很常见的需要.
    也可以直接采用命令行的方式修改npm远程仓库
    npm config set registry http://192.168.1.1

    值得一提的是:
    大部分时间里, 项目的前端编译出现问题, 都是npm的install出现问题.
    而npm无法成功install, 很多时候是源没有设置好. 无法成功获取到所需要的依赖包.

    版本管理

    有时项目需要, 需要明确各个工具的具体版本.
    则需要明确一个概念.
    node是node, npm是npm.
    有的时候, 库的版本会和node的版本不兼容.
    我们要明确 node的版本, npm的版本, 库的版本.

    node -version
    npm --version
    gulp --version
    vue --version
    
  • 相关阅读:
    iframe嵌套
    fiddler——一款莱斯的抓包工具
    工程代码规范和更新规范
    新项目新工作空间新仓库新setting文件
    quartz-job实现实时或定时发送短信任务
    quartz-job实现定时任务配置
    quartz开源作业调度框架的配置
    Confluence 6 让一个空间可以公众访问
    Confluence 6 管理和恢复空间管理权限
    Confluence 6 指派和撤销空间权限
  • 原文地址:https://www.cnblogs.com/jrri/p/13562162.html
Copyright © 2020-2023  润新知