>  기사  >  웹 프론트엔드  >  nodejs의 모듈 정의 소개

nodejs의 모듈 정의 소개

不言
不言원래의
2018-06-30 14:31:481512검색

이 글은 주로 nodejs의 모듈 정의 방법을 소개하고, nodejs 모듈의 원리와 공통 모듈, 해당 정의 방법을 예시 형태로 분석합니다. 필요한 친구들이 참고할 수 있습니다

이 글의 예시는 모듈 정의를 설명합니다. nodejs의 메소드. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

1. 모듈 정의

소위 nodejs의 모듈은 파일입니다! .js 파일은 nodejs 모듈입니다. 모듈과 파일 사이에는 일대일 대응이 있으므로 참조 모듈은 require('파일 경로')입니다.

예:

var circle = require('./circle.js');
console.log( 'The area of a circle of radius 4 is '
      + circle.area(4));

이 파일의 이름은 foo.js

var PI = Math.PI;
exports.area = function (r) {
 return PI * r * r;
};
exports.circumference = function (r) {
 return 2 * PI * r;
};

이 파일의 이름은 Circle.js

두 개의 js 코드 파일이 같은 폴더에 있습니다.

다른 폴더의 모듈을 참조하고 싶다면 경로를 직접 적어주세요. 여기의 경로 형식은 Linux의 경로 형식과 동일합니다. /../../.js 이는 절대 경로이고, ../.js는 상위 레이어이고, ./.js는 현재 경로입니다.

여기에서 내보내기와 module.exports의 차이점에 주의해야 합니다. 내보내기는 실제로 module.exports에 대한 참조일 뿐입니다(a=2, b=a, b는 b=c인 경우 a를 참조하는 것과 같습니다. b는 a)를 가리키지 않으므로 공식 홈페이지의 의미를 이해할 수 있도록 합니다(export의 루트를 함수로 선언하고 싶거나 객체를 생성하려는 경우에는 내보내기 대신 module.exports를 사용하세요). )

2 .순환 참조

a.js:

console.log('a starting');
exports.done = false;
var b = require('./b.js');
console.log('in a, b.done = %j', b.done);
exports.done = true;
console.log('a done');

b.js:

console.log('b starting');
exports.done = false;
var a = require('./a.js');
console.log('in b, a.done = %j', a.done);
exports.done = true;
console.log('b done');

main.js:

console.log('main starting');
var a = require('./a.js');
var b = require('./b.js');
console.log('in main, a.done=%j, b.done=%j', a.done, b.done);

보세요, 이것은 a.js입니다. b.js와는 서로 다릅니다. 이로 인해 무한 루프가 발생합니까? 아니요, 이는 단지 하나의 모듈이 로드되지 않았기 때문입니다. 즉, 모듈의 일부를 사용할 수 없습니다. 여기처럼 a.js가 먼저 로딩되는데, a.js가 로딩되면서 a.js가 b.js를 로딩하게 되는데 이때는 a.js가 정체되어 require 앞의 데이터만 로딩되고, b.js 항상 로드됩니다. 작업 결과는 다음과 같습니다.

$ node main.js
main starting
a starting
b starting
in b, a.done = false
b done
in a, b.done = true
a done
in main, a.done=true, b.done=true

3. 코어 모듈

소위 코어 모듈은 실제로 Java의 공용 패키지와 마찬가지로 nodejs에서 개발한 공용 패키지입니다. 핵심 모듈에 액세스하려면 require('파일 이름')만 입력하면 액세스할 수 있습니다. 실제로 공용 모듈 패키지는 nodejs가 설치한 node_modulesnpmlib 아래에 배치됩니다.

4. 파일 모듈

소위 참조와 정확히 일치하는 경우 nodejs는 먼저 .js, .json 확장자를 사용한 다음 .js 파일은 JavaScript 파일입니다. .json 파일은 json 형식 구문 분석으로 호출되며, .node는 dlopen

을 사용하여 추가 모듈로 로드됩니다. 또한 '/' 및 './'와 같은 기호 수정이 없는 경우에는 모듈은 node_modules에 로드됩니다. 이 파일은 아래를 참조하세요.

5.node_modules 폴더

모듈 참조 시 '/' '../' './' 같은 형식 기호 한정이 없는 경우 검색 방법은 다음과 같습니다. 파일이 ' / home/ry/projects/foo.js', require('bar.js')를 참조하는 경우 bar.js를 찾는 방법은 다음과 같습니다. require('bar.js'),那么这个bar.js寻找方式如下:

/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js

也就是从当前路基开始,一步一步向父目录添加node_modules文件夹作为模块地址。

require('example-module/path/to/file')这种引用和require('bar.js')是一样的解析。

6.以文件夹名字引用模块

大致分为两种:1)写package.json文件,此文件写在项目的根目录下,其形式如下:

{ "name" : "some-library",
 "main" : "./lib/some-library.js" }

这样写出来的require('./some-library')其真正的是

require('./some-library/lib/some-library.js')

2)直接约定好为index.js或index.node文件加载,同上的require,其加载可能如下:

./some-library/index.js
./some-library/index.node

7.缓存

一个模块的多次引用会只做一次加载。就像java中的static关键字修饰。不过要值得注意的是,当你require('foo')

/home/ry/projects/node_modules/bar.js

/home/ry/node_modules/bar.js

/home/node_modules/bar.js

/node_modules/bar.js

즉, 현재 노반에서 시작하여 node_modules 폴더를 모듈 주소로 상위 디렉토리에 단계별로 추가합니다. require('example-module/path/to/file')이러한 종류의 참조는 require('bar.js')와 동일하게 구문 분석됩니다.

6. 폴더 이름에 따른 참조 모듈
은 크게 두 가지로 나눌 수 있습니다. 1) package.json 파일을 작성하며, 해당 파일은 프로젝트의 루트 디렉터리에 작성됩니다.

🎜 🎜rrreee🎜🎜🎜이렇게 작성한 require('./some-library')는 실제로 🎜🎜🎜rrreee🎜🎜🎜2) index.js 또는 index.node 파일에 대해 로드되도록 직접 동의한 것과 같습니다. 위와 같은 요구 사항이 있는 경우 로딩은 다음과 같을 수 있습니다: 🎜 🎜./some-library/index.js🎜./some-library/index.node🎜🎜🎜 7. Cache🎜🎜🎜모듈에 대한 다중 참조 로드는 한 번만 수행됩니다. Java의 정적 키워드 수정과 같습니다. 그러나 require('foo')할 때 이 양식이 반드시 동일한 파일이 매번 참조된다는 것을 보장하지는 않는다는 점은 주목할 가치가 있습니다(다른 폴더에서 참조할 수 있기 때문입니다). 🎜🎜위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요! 🎜🎜관련 권장 사항: 🎜🎜🎜Node의 클러스터 모듈에 대해 알아보기🎜🎜🎜🎜🎜Node.js와 함께 Angular 사용 소개🎜🎜🎜

node.js가 fs 모듈을 기반으로 시스템 파일과 디렉터리를 읽고 쓰는 방법에 대해

위 내용은 nodejs의 모듈 정의 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.