• node相关内容


    npm

    1. npm 安装的模块会安装在node_modules文件夹中,我们通过npm下载的包,直接通过包名引入即可
    2. node在使用模块名字来引入模块是,它会首先在当前目录的node包中寻找是否含有该模块,如果有则直接使用,没有则去上一级node包中训中,知道找到为止,如果找到磁盘的根目录,依然没有,则报错
    3. ~和^的作用和区别是什么呢?
    ~会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
    ^会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
    那么该如何选择呢?当然你可以指定特定的版本号,直接写1.2.3,前面什么前缀都没有,这样固然没问题,但是如果依赖包发布新版本修复了一些小bug,那么需要手动修改package.json文件;~和^则可以解决这个问题。
    但是需要注意^版本更新可能比较大,会造成项目代码错误,比如这篇文章(http://blog.csdn.net/u014291497/article/details/54427103)的问题就是因为package.json使用^1.5.7造成的,1.6版本的包与现有代码不兼容。
    所以建议使用~来标记版本号,这样可以保证项目不会出现大的问题,也能保证包中的小bug可以得到修复。
    或者版本号写*,这意味着安装最新版本的依赖包,但缺点同上,可能会造成版本不兼容,慎用!
    

    什么是包

    • 为了便于管理和使用,我们可以把有多个子模块组成的大模块称作包,并把所有子模块放在同一个目录里。
    • 组成一个包的所有子模块中,需要有一个入口模块,入口模块的导出对象被作为包的导出对象。
    • 默认包中的入口模块为index.js,也可以在包中新建一个package.json包描述文件,设置main属性值为模块的入口
    • 包等于项目,模块等于文件

    package.json

    • 版本1.0.0(大版本号:做了不兼容修改或颠覆式的重写。中版本号:向下兼容的功能性新增 。小版本号:向下兼容的问题修正、修改bug。)
    • name:项目名称、version:版本号、description:项目描述、main:主模块、dependencies:依赖列表、devDependencies:开发时依赖、scripts:脚本命令,npm执行命令、
    • npm init创建

    上传(简单方式)

    • 新建一个文件夹demo,然后npm init -y 增加一个package.json文件
    • demo里创建一个index.js文件,然后写上要导出的代码
    • npm login登录npm账号
    • npm publish
    {
      "name": "math_manage",  // 包名(必须填写)不能有大写
      "version": "1.0.0", // 版本号(必须填写)
      "description": "",
      "main": "index.js", // 入口文件
      "scripts": {
        "test": "echo "Error: no test specified" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC"
    }
    
    

    上传(嵌套方式)

    • 新建一个文件夹demo,然后npm init -y 增加一个package.json文件
    • demo里创建一个index.js文件,创建一个components文件夹,components文件夹创建modal文件夹和index.js文件夹,modal文件夹创建index.js文件
    • npm login登录npm账号
    • npm publish
    // demo文件夹里的index.js
    module.exports = require('./components');
    // components文件夹里的index.js
    export { default as modal } from './modal';
    // modal文件夹里的index.js
    const modal = '123421411234124';
    export default modal;
    // 引入
    import {
      modal
    } from 'math_manage'
    console.log(modal); // 123421411234124
    

    引入(require)

    1. 引入自定义模块
    var method = require('./method.js');
    2. 引入第三方模块
    var webpack = require('webpack');
    1. 引入系统模块
    var fs = require('fs');
    
    • 注意事项
    1.当一个模块被多次引用时,只会执行一次,将暴露的对象写入缓存,可以重复使用
    var method1 = require('./method.js');
    var method2 = require('./method.js');
    var method3 = require('./method.js');
    var method4 = require('./method.js');
    
    

    导出(export)

    exports导出对象:
        作用:将模块中需要共享给其他模块的数据暴露到引用处
        语法:
            exports.属性名=值;
            exports.方法名=函数;
            
        注意:
            1.exports是module.exports对象的引用,指向同一个内存空间 module.exports===exports
            2.exports是module.exports的引用,不能改指向,只能添加属性和方法
            3.module.exports才是真正的暴露对象,指向哪里就暴露哪里(建议使用module.exports不会出错)
    

    path

    • 系统模块
    path.normalize(p)
    规范化路径,注意'..' 和 '.'。
    
    path.join([path1][, path2][, ...])
    用于连接路径。该方法的主要用途在于,会正确使用当前系统的路径分隔符,Unix系统是"/",Windows系统是""。
    
    path.resolve([from ...], to)
    将 to 参数解析为绝对路径。
    
    path.isAbsolute(path)
    判断参数 path 是否是绝对路径。
    
    path.dirname(p)
    返回路径中代表文件夹的部分,同 Unix 的dirname 命令类似。
    
    path.basename(p[, ext])
    返回路径中的最后一部分。同 Unix 命令 bashname 类似。
    
    path.extname(p)
    返回路径中文件的后缀名,即路径中最后一个'.'之后的部分。如果一个路径中并不包含'.'或该路径只包含一个'.' 且这个'.'为路径的第一个字符,则此命令返回空字符串。
    
    path.parse(pathString)
    返回路径字符串的对象。
    
    path.format(pathObject)
    从对象中返回路径字符串,和 path.parse 相反
    
    
    var path = require("path");
    
    // 格式化路径,返回结果 normalization : /test/test1/2slashes/1slash
    console.log('normalization : ' + path.normalize('/test/test1//2slashes/1slash/tab/..'));
    
    // 连接路径,返回结果 joint path : /test/test1/2slashes/1slash
    console.log('joint path : ' + path.join('/test', 'test1', '2slashes/1slash', 'tab', '..'));
    
    // 转换为绝对路径,返回结果 resolve : /web/com/1427176256_27423/main.js
    console.log('resolve : ' + path.resolve('main.js'));
    
    // 路径中文件的后缀名,返回结果 ext name : .js
    console.log('ext name : ' + path.extname('main.js'));
    
  • 相关阅读:
    设计模式之里氏替换原则
    设计模式之依赖倒置原则讲解
    条款10 若不想使用编译器自动生成的函数,就该明确拒绝
    Django---常用字段和参数
    Python中abc
    Python中鸭子类型
    Python多继承的正确打开方式:mixins机制
    python新式类和经典类的区别
    Django---drf权限、频率、过滤、排序、异常处理
    删库跑路技巧 删库跑路命令
  • 原文地址:https://www.cnblogs.com/Hsong/p/9768860.html
Copyright © 2020-2023  润新知