node-load module

javscript :脚本建共享全局名称空间(全局污染)。

node:实现CommonJS(公共)模块标准。

 

Node加载模块,有两种方式:

1.通过名称

  除非是核心模块,否则被引用的模块最后都会映射为一个文件路径。

2.通过路径

 

Node导入模块:

无论是第三方或者npm官方,都可以使用以下require来导入模块

var module = require ('module_name');

导入模块后,该对象表示模块对外暴露的JavaScript API。

根据模块不同,该对象是任意的JavaScript值。

可以是一个函数,也可以是一个具有若干数学的对象。

属性可能是函数、数组或其他任何类型的JavaScript对象。

 

Node导出模块:

CommonJs模块系统是文件之间共享对象或函数的唯一方式。

对于比较复杂的应用程序,你应该分类、对象、函数他们的重用性并且划分好----只暴露你指定的内容。

文件和模块是一个个对应的

function Circle(x, y, z) {
    function r_squared() {
        return Math.pow(r, 2);
    }

    function area() {
        return Math.PI * r_squared()
    }

    return {
        area: area
    };
}

 

下面举例它们之间的关系

//Module2.js
//来自第三方或者npm官方
function
printA() { conosole.log('A'); } function printB() { conosole.log('B'); } function printC() { conosole.log('C'); } module.exports.printA = printA; module.exports.printB = printB; module.exports.printC = printC; module.exports.pi = Math.PI;

 

如何使用加载模块呢? 下面给出方法

var myModule = require('./myModoule2'); //省略js或不省略皆可,导入(加载)的时候。
var myModule = require('./myModule2.js'); myModule2.printA();

导入模块时的myModule2.printA -> A ,是不是又想起了Vue和Angular呢?

 

模块分为:核心模块(node自带)、npm官方模块、本地(自制)模块。

核心模块加载优先所有模块! 核心模块只能通过模块名引用,而不能通过文件路径。

下面介绍一下http核心模块

var http = require('http');

上述code会返回http模块对象,由它实现的Node API文档描述中的HTTP API。

 

加载文件夹模块

var myMoudle = require('./myModuleDir');

 

首先会查找myModuleDir.js,然后会查找整个(myModuleDir)文件夹,并尝试查找包(package.j

son)

其默认值为index.js(除此之外还会查找index.node)。

如果文件夹存在package.json,那么Node将会尝试解析文件并查找到main属性,将main属性当做入口点的相对路径。

//package.json
{
"name": "myModule", "main": "./lib/myModule.js" }

Node就会根据路径 ./myModuleDir/lib/myModule.js加载文件。

 

从node_module文件夹加载

一个模块既不是相对路径也不是核心模块,那么就会Node就会尝试在当前目录下的node_modules文件夹查找该模块。

如果没有找到该模块就会一直找下去,直到根目录(上至附文件夹,下至子目录)。

本地目录node_modules是NPM默认模块安装的位置。

NPM命令会帮你管理好你的node_modules目录。

 

 

缓存模块

模块首次加载会缓存,你要记号,缓存好处和坏处。

> node-red@3.0.2 start D:\develop\pro\node-red > node packages/node_modules/node-red/red.js internal/modules/cjs/loader.js:818 throw err; ^ Error: Cannot find module 'express' Require stack: - D:\develop\pro\node-red\packages\node_modules\node-red\red.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15) at Function.Module._load (internal/modules/cjs/loader.js:667:27) at Module.require (internal/modules/cjs/loader.js:887:19) at require (internal/modules/cjs/helpers.js:74:18) at Object.<anonymous> (D:\develop\pro\node-red\packages\node_modules\node-red\red.js:32:15) at Module._compile (internal/modules/cjs/loader.js:999:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) at Module.load (internal/modules/cjs/loader.js:863:32) at Function.Module._load (internal/modules/cjs/loader.js:708:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12) { code: 'MODULE_NOT_FOUND', requireStack: [ 'D:\\develop\\pro\\node-red\\packages\\node_modules\\node-red\\red.js' ] } npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! node-red@3.0.2 start: `node packages/node_modules/node-red/red.js` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the node-red@3.0.2 start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm WARN Local package.json exists, but node_modules missing, did you mean to install? npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\ld\AppData\Roaming\npm-cache\_logs\2023-06-13T08_53_13_791Z-debug.log
06-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值