- Ang npm ay gumaganap bilang isang napakalaking registry ng pakete at ang pangunahing tool ng CLI para sa pag-install, pag-update, pag-alis at pag-audit ng mga dependency ng Node.js.
- Ang mga proyekto ay umaasa sa package.json upang tukuyin ang mga dependency, script, at entry point sa pamamagitan ng mga field tulad ng main, exports, imports at type.
- Ang mga lokal vs pandaigdigang pag-install, mga saklaw ng semver, at mga uri ng dependency (mga dependency, devDependencies, optionalDependencies) ang kumokontrol kung paano at saan ginagamit ang mga pakete.
- Ang mga advanced export, conditional export, at subpath import ay nagbibigay ng pinong kontrol sa kung ano ang inilalantad ng isang package tulad ng nodebbs sa iba't ibang kapaligiran.

Kung sinusubukan mong maunawaan kung paano umaangkop ang isang npm package tulad ng "nodebbs" sa ecosystem ng Node.js, kailangan mo muna ng matibay na pag-unawa sa kung ano ang npm , kung paano nakabalangkas ang mga package, at kung paano nireresolba at inilalantad ng Node ang mga module. Ang mga modernong proyekto ng Node.js ay lubos na nakasalalay sa npm, hindi lamang sa pag-install ng code kundi pati na rin sa pamamahala ng mga script, seguridad, pag-bersyon, at kung paano ginagamit ng iba ang iyong package.
Ang gabay na ito ay tumatalakay sa npm mula sa simula — ano ito, paano gumagana ang mga lokal at pandaigdigang pakete, paano i-install, i-update at alisin ang mga ito, paano package.json ay nakabalangkas, at kung paano ang mga advanced na tampok tulad ng exports at imports Kinokontrol ng mga field kung ano ang iniaalok ng iyong package (halimbawa, isang forum engine tulad ng nodebbs) sa mga mamimili. Ang lahat ay ipinaliwanag sa simpleng Ingles na may maraming halimbawa upang may kumpiyansa kang mai-publish at magamit ang mga npm package.
Ano ang npm at bakit ito mahalaga para sa mga pakete tulad ng nodebbs
npm (Node Package Manager) ay isang command-line tool at isang malaking online registry ng mga open source na Node.js package. Kapag na-install mo ang Node.js sa iyong system, awtomatikong mai-install ang npm, na magbibigay sa iyo ng agarang access sa milyun-milyong reusable modules na inilathala ng komunidad sa npmjs.com.
Ang npm registry ay epektibong ang pinakamalaking single-language code repository sa planeta, na may mahigit isang milyong nailathalang pakete na sumasaklaw sa halos lahat ng maiisip na gawain. Ang mga paketeng ito ay mula sa maliliit na utility (isang function) hanggang sa kumpletong frameworks, CLIs, at application skeletons na nagpapagana sa mga production app araw-araw.
Sa simula, ang npm ay dinisenyo lamang upang pamahalaan ang mga dependency para sa mga backend na proyekto ng Node.js, ngunit ngayon ito ay isa na ring pangunahing tool para sa mga frontend workflow. Maaari mong i-install ang React, mga tooling tulad ng Webpack o Vite, mga CSS framework, mga test runner, at marami pang iba — lahat ay ipinamamahagi bilang mga npm package.
Kapag nagtatrabaho gamit ang isang partikular na pakete tulad ng nodebbs, Ang npm ang responsable sa pag-download ng code nito, paglutas sa mga dependency nito, pagpapanatili ng mga bersyon na pare-pareho sa iyong team, at pag-wire ng anumang script o CLI na inilalantad nito. Kaya naman mahalaga ang pag-unawa sa npm kung gusto mong suriin, i-customize, o kahit na mag-publish ng isang package nang mag-isa — tingnan ang Malawakang pag-atake sa supply-chain ng npm.
Node.js, npm at kung paano i-install ang mga ito
Para magamit ang anumang npm package — kabilang ang nodebbs — kailangan mong naka-install ang Node.js at npm sa iyong makina. Ang npm ay kasama ng Node, kaya i-install mo lang ang Node mula sa opisyal na site at handa ka nang magsimula.
Ang inirerekomendang paraan ay ang pag-install ng Node.js sa pamamagitan ng isang version manager tulad ng nvm, na nagbibigay-daan sa iyong lumipat sa pagitan ng maraming bersyon ng Node at npm. Ginagawa nitong madali ang pagsubok sa iyong proyekto gamit ang iba't ibang bersyon ng Node at iniiwasan ang mga isyu sa pahintulot na maaaring lumitaw sa mga installer sa buong system.
Mabilis mong mabeberipika kung Nariyan na ang node at npm sa pamamagitan ng pagbubukas ng terminal at pagpapatakbo ng: node -v para tingnan ang bersyon ng Node at npm -v para kumpirmahin ang bersyon ng npm.
Kung nawawala ang Node.js o masyadong luma na ang iyong bersyon, i-download ang Paglabas ng Pangmatagalang Suporta (LTS) mula nodejs.org para sa iyong operating system. Sa Windows at macOS, ise-set up ng installer ang lahat; sa Linux, maaari mong gamitin ang NodeSource o ang gustong paraan ng iyong distribution, o muli ang isang version manager tulad ng nvm.
Mga pangunahing konsepto ng npm: mga pakete, mga modyul at ang registry
Sa mundo ng Node.js, isang "pakete" ay isang naka-bundle na piraso ng code na kinabibilangan ng lahat ng kailangan para sa isang module o application: mga JavaScript file, metadata, dokumentasyon, at kung minsan ay mga artifact ng build. Karaniwang naninirahan ang mga package sa isang direktoryo na may package.json file na naglalarawan kung ano ang nilalaman ng mga ito.
A "Modyul" ay isang yunit ng code na maaari mong i-import sa Node.js gamit ang require() or import, at ang isang npm package ay karaniwang naglalantad ng isa o higit pang mga module para magamit ng mga consumer. Halimbawa, maaaring mag-export ang isang utility library ng isang pangunahing module, habang ang isang kumplikadong package tulad ng nodebbs ay maaaring maglantad ng maraming entry point para sa mga bahagi ng server at client nito.
Ang mga pakete ay inilalathala sa publiko rehistro ng npm (o sa mga pribadong registry) para ma-install ito ng ibang mga developer gamit ang isang simpleng command. Sa ilalim ng hood, dina-download ng npm ang mga file, bine-verify ang dependency tree, at iniimbak ang lahat sa isang node_modules folder para ma-import ito ng iyong app.
Kabilang sa mga sikat na halimbawa ng mga npm package ang mga framework tulad ng Express, React at Vue , mga utility tulad ng Lodash at Chalk, mga backend helper tulad ng Mongoose at Socket.io, at mga tooling tulad ng Jest, Webpack, Babel, Nodemon, at Axios. Ang isang package tulad ng nodebbs ay maaaring katabi ng mga ito bilang isa pang installable dependency na iyong isinasaksak sa iyong application stack.
Paggawa gamit ang npm sa command line
Ang npm command-line interface (CLI) ay kung paano mo ini-install, inaalis, ina-update, at sinusuri ang mga pakete, pati na rin kung paano mo pinapatakbo ang mga script ng proyekto. Sa Windows, karaniwan mong bubuksan ang Command Prompt o PowerShell; sa macOS at Linux, gagamitin mo ang terminal.
Ilan sa mga pinakakaraniwang ginagamit na utos ng npm ay npm install, npm uninstall, npm update, npm init, npm start, npm test, at npm publishKapag pinagsama-sama, sakop ng mga utos na ito ang halos lahat ng kailangan mo upang pamahalaan ang mga dependency ng proyekto ng Node.js at mga gawain sa life cycle.
Para mag-install ng bagong pakete nang lokal sa iyong proyekto, karaniwan mong pinapatakbo ang npm install <package-name> mula sa ugat ng proyekto. Ida-download nito ang pakete papunta sa node_modules at, gamit ang modernong npm, awtomatikong nagdaragdag ng entry sa ilalim ng dependencies in package.json.
Mga pandaigdigang instalasyon, gamit ang npm install -g <package-name>, ay nakalaan para sa mga tool na gusto mong available kahit saan sa iyong system — mga bagay tulad ng nodemon, typescript, o iba pang mga CLI. Ang iyong mga library sa antas ng app (kasama ang mga nodebbs) ay halos palaging nabibilang sa lokal dependencies sa halip.
Pagsisimula ng isang proyekto ng Node at ang papel ng package.json
Ang bawat seryosong proyekto ng Node.js ay nagsisimula sa isang package.json file, na nagsisilbing manifest para sa iyong app o library. Nag-iimbak ito ng metadata (pangalan, bersyon, paglalarawan), mga script, mga dependency, at impormasyon tungkol sa kung paano dapat i-load ang package.
Ginagawa mo ang file na ito sa pamamagitan ng pagpapatakbo ng npm init sa isang walang laman na folder, pagkatapos ay sagutin ang ilang mga prompt tungkol sa proyekto. Kung mas gusto mong laktawan ang mga tanong, npm init -y bumubuo ng isang minimal package.json na may mga makatwirang default na maaari mong i-edit sa ibang pagkakataon.
minsan package.json umiiral, ang bawat paketeng iyong ini-install ay naitala sa ilalim ng alinman sa dependencies, devDependencies, o iba pang nakalaang seksyon. Ito ang nagpapahintulot sa ibang developer na i-clone ang iyong repo at patakbuhin lang npm install upang ibalik ang buong dependency tree.
Para sa isang pakete tulad ng nodebbs na maaaring gusto mong i-publish, package.json idinedeklara rin ang pangalan ng pakete, mga entry point, at anumang mga field tulad ng main, exports, O type na kumokontrol kung paano nireresolba ng Node ang mga module nito. Ginagawa nitong package.json mahalaga kapwa sa pagkonsumo at sa paggawa ng mga npm package.
Lokal vs pandaigdigang pag-install ng mga pakete ng npm
Ang mga lokal na pakete ay naka-install sa kasalukuyang proyekto node_modules direktoryo at magagamit lamang sa loob ng proyektong iyon. Kapag pinatakbo mo ang npm install express or npm install nodebbs Sa folder ng iyong proyekto, ang pakete ay magiging bahagi ng dependency graph ng app na iyon.
Pinipigilan ng lokal na estratehiya sa pag-install na ito ang mga conflict sa bersyon sa pagitan ng mga proyekto dahil pinapanatili ng bawat proyekto ang sarili nitong mga kopya ng mga dependency. Maaaring gamitin ng isang app ang Express 4 habang ang isa naman ay gumagamit ng Express 5, at hindi sila makakasagabal sa isa't isa.
Mga pandaigdigang pakete, na naka-install gamit ang npm install -g, ay inilalagay sa isang lokasyon sa buong sistema at karaniwang inilalantad ang mga command-line tool. Maaari mo itong gamitin para sa nodemon, typescript, o para sa mga pandaigdigang tagabuo ng proyekto, ngunit bihira mong gugustuhing maging pandaigdigan ang application code tulad ng nodebbs.
Pinapayagan ka rin ng npm na baguhin ang pandaigdigang prefix ng pag-install gamit ang npm config set prefix <path>, na madaling gamitin kung wala kang mga karapatan bilang admin o gusto mong maiwasan ang mga error sa pahintulot kapag nag-i-install ng mga global CLI. Sa ganoong paraan, ang iyong mga global tool ay nasa isang user-writable directory.
Pamamahala ng mga dependency: i-install, i-update, at alisin
Sa pang-araw-araw na trabaho, gugugulin mo ang maraming oras sa pagdaragdag, pag-update, at paminsan-minsang pag-aalis ng mga npm dependencies . Ang npm ay nagbibigay ng mga simpleng utos para sa bawat isa sa mga operasyong ito, kapwa lokal at pandaigdigan.
Ang pag-install ng lahat ng dependency sa isang umiiral na proyekto ay kasing simple ng pagpapatakbo npm install sa direktoryo kung saan package.json buhay. Binabasa ng npm ang listahan ng mga dependency at devDependencies at muling nililikha ang node_modules folder nang naaayon.
Para magdagdag ng isang dependency, patakbuhin ang npm install <package-name> (O npm i <package-name> sa madaling salita), opsyonal na may mga watawat tulad ng --save-dev, --save-optional, O --no-saveKinokontrol ng mga flag na ito kung ang package ay naitala bilang isang regular na dependency, isang development-only dependency, o hindi talaga naitala.
Maaaring gawin ang pag-update ng mga dependency sa buong proyekto gamit ang npm update, na nag-a-upgrade ng mga pakete sa mga mas bagong bersyon na nakakatugon pa rin sa mga saklaw ng bersyon sa package.jsonMaaari mo ring i-target ang isang pakete gamit ang npm update <package-name>, o magdagdag -g kung nag-a-update ka ng isang pandaigdigang tool.
Ang pag-uninstall ng isang pakete ay simetriko: npm uninstall <package-name> inaalis ito mula sa node_modules at naglilinis ng package.json pagpasok. Gamit ang npm uninstall -g ginagawa rin nito ang pareho para sa mga paketeng naka-install sa buong mundo.
Pag-unawa sa mga dependency, devDependencies at optionalDependencies
In package.json, pinag-iiba ng npm ang iba't ibang uri ng dependency depende sa kung kailan at paano ang mga ito kinakailangan. Ang tamang paghihiwalay na ito ay nagpapanatili sa iyong production bundle na hindi masyadong mabigat at ang iyong mga kagamitan ay nababaluktot.
dependencies Inililista nito ang mga paketeng kinakailangan para tumakbo ang iyong aplikasyon sa produksyon. Para sa isang web app, maaaring kasama rito ang Express, Mongoose, o kahit ang nodebbs mismo kung ini-embed mo ito bilang bahagi ng iyong server stack.
devDependencies naglalaman ng mga pakete na kailangan lamang sa panahon ng pag-develop o pagbuo, tulad ng Jest, ESLint, Webpack, Babel, o Nodemon. Hindi ito naka-install kapag pinatakbo mo npm install --production, na nagpapanatiling mas magaan ang iyong kapaligiran sa produksyon.
optionalDependencies Naglalaman ng mga pakete na nagpapahusay sa iyong app ngunit hindi mahigpit na kinakailangan. Kung ang isang opsyonal na dependency ay hindi mai-install, hindi ito ituturing ng npm bilang isang nakamamatay na error; inaasahang hahawakan ng iyong code ang kawalan nito nang maayos.
Mga bandila tulad ng --save-prod (default), --save-dev (O -D), At --save-optional kontrol kung saan naitala ang isang bagong naka-install na pakete. Sa kasaysayan, mayroong isang tahasang --save bandila, ngunit ang mga modernong npm treats npm install <name> bilang isang operasyong save-to-dependencies bilang default.
Semver at pag-install ng mga partikular na bersyon ng pakete
mga gamit ng npm semantikong bersiyon (semver) para pamahalaan ang mga bersyon ng mga pakete, na mahalaga kapag umaasa ka sa mga kumplikadong library o sa isang pakete tulad ng nodebbs na maaaring magbago sa paglipas ng panahon. Ginagamit ni Semver ang pattern MAJOR.MINOR.PATCH (Halimbawa, 1.4.3).
Sa semver, tumataas ang numero ng MAJOR kapag may mga pagbabagong hindi naaangkop, ang MINOR naman ay para sa mga karagdagang feature na tugma sa nakaraan, at ang PATCH naman ay para sa mga pag-aayos ng bug na hindi dapat makasira sa kasalukuyang code. Binibigyang-daan ng modelong ito ang mga package na umunlad nang hindi patuloy na nasisira ang mga downstream app.
Maaari kang mag-install ng eksaktong bersyon ng isang pakete gamit ang npm install package@version, Halimbawa npm install express@4.17.1Kapaki-pakinabang ito kung gusto mong i-lock ang iyong proyekto sa isang kilalang-mahusay na bersyon habang sinusubukan mo nang hiwalay ang mga bagong release.
Sa loob package.json, maaari mong tukuyin ang mga flexible na saklaw gamit ang mga karakter tulad ng ^ at ~ o paggamit "latest" or * para laging makuha ang pinakabagong compatible na release. Halimbawa, "express": "^4.1.1" Sinasabi sa npm na gumamit ng anumang katugmang 4.x na bersyon na mas mataas sa 4.1.1, ngunit hindi sa 5.x.
Mga pandaigdigang pakete at mga tool ng CLI
Ang mga global npm package ay pangunahing ginagamit upang mag-install ng mga command-line tool na gusto mong magamit anuman ang proyektong iyong ginagawa. Ang mga tool na ito ay nagrerehistro ng mga executable sa iyong PATH para ma-invoke mo ang mga ito nang direkta mula sa terminal.
Kabilang sa mga halimbawa ng mga kapaki-pakinabang na pandaigdigang pakete ang nodemon para sa awtomatikong pag-restart ng mga Node server habang nagde-develop at typescript para sa pag-compile ng TypeScript mula sa kahit saan sa iyong makina. Ang pag-install ay ginagawa gamit ang npm install -g <package-name>.
Maaari mong suriin kung aling mga pandaigdigang pakete ang naka-install sa pamamagitan ng pagpapatakbo npm list -g --depth=0, na nagpi-print ng isang patag na listahan ng mga module na magagamit sa buong mundo at ang kanilang mga bersyon. Ito ay nakakatulong para sa pag-audit ng iyong setup o pag-debug ng mga isyu sa CLI.
Ang pag-update o pag-alis ng mga global tool ay gumagana sa parehong paraan tulad ng mga lokal: gamitin npm update -g <package-name> para mag-update at npm uninstall -g <package-name> para alisin ang mga ito. Ang pagpapanatiling napapanahon ng mga pandaigdigang tool ay tinitiyak na makukuha mo ang mga pinakabagong pag-aayos at mga patch sa seguridad.
Paglilista, pag-inspeksyon at pag-awdit ng mga naka-install na pakete
Habang lumalaki ang iyong proyekto, ang pagsubaybay kung aling mga pakete ang naka-install at kung aling mga bersyon ang ginagamit ng mga ito ay nagiging lalong mahalaga. Ang npm ay nagbibigay ng mga utos upang ilista at siyasatin ang iyong dependency tree.
npm list Ipinapakita ng *hierarchy* ng mga lokal na naka-install na pakete sa kasalukuyang proyekto, kabilang ang mga nested dependencies na pinagbabasehan ng iyong mga direktang dependencies. Makikita mo kung aling mga bersyon ang na-install at kung paano sila nakakonekta.
npm list -g gumagana nang katulad ngunit para sa mga pandaigdigang naka-install na pakete, at pagdaragdag --depth=0 Nililimitahan nito ang output sa mga entry sa pinakamataas na antas lamang. Pinapanatili nitong nababasa ang output, lalo na kapag maraming nested dependencies ang naroroon.
Para sa seguridad, kasama sa npm ang isang tampok sa pag-audit: tumatakbo npm audit Ini-scan ang iyong dependency tree laban sa isang vulnerability database at naglalabas ng ulat ng mga kilalang isyu — tingnan ang Insidente sa bulate na Shai HuludMadalas mong maaayos ang marami sa mga ito nang awtomatiko gamit ang npm audit fix, na nagtutulak sa mga bersyon ng dependency patungo sa mga ligtas na release hangga't maaari.
Ang mga regular na pag-audit at pag-update ay lubos na nakakabawas sa panganib ng paglalantad ng iyong aplikasyon sa mga kilalang kahinaan na nakatago sa mga third-party module — halimbawa, tingnan ang malisyosong npm package impersonation . Ito ay partikular na kritikal kapag umaasa ka sa malalaking pakete tulad ng nodebbs na maaaring magdala ng malalim na kadena ng mga dependency.
Paggamit ng mga naka-install na pakete sa iyong Node.js code
Kapag na-install mo na ang isang package nang lokal, handa na itong i-import sa iyong Node.js application at gamitin tulad ng ibang module. Matagal nang ginagamit ng Node ang Mga modyul ng CommonJS sa pamamagitan ng require(), ngunit ang mga modernong proyekto ay madalas ding umaasa sa mga module ng ECMAScript na may import.
Para sa CommonJS, maaari mong isulat const express = require('express') or const nodebbs = require('nodebbs') sa itaas ng iyong file para maipasok ang pangunahing export ng package. Mula doon, gagamitin mo ang dokumentadong API nito para i-configure ang mga ruta, middleware, o sa kaso ni nodebbs, mga tampok ng forum.
Para sa mga module ng ECMAScript (kapag ang iyong package.json ay "type": "module" o gamitin mo .mjs mga file), sa halip ay gagawin mo import express from 'express'Maraming modernong pakete na ngayon ang naglalathala ng mga ESM build, at sinusuportahan ng Node ang parehong format.
Tandaan na ang malalaking pakete ay kadalasang naglalantad ng maraming entry point, kaya maaari kang mag-import ng mga submodule tulad ng import { Router } from 'express' or import feature from 'nodebbs/feature.js', depende sa kung paano isinaayos ng may-akda ng pakete ang kanilang mga export. Dito matatagpuan ang exports patlang sa pakete package.json nagiging mahalaga.
mga script ng npm: pag-automate ng mga gawain gamit ang package.json
Higit pa sa pamamahala ng dependency, ang npm ay nagsisilbing isang simpleng task runner sa pamamagitan ng scripts na seksyon ng package.jsonBinibigyang-daan ka ng mga script na magtakda ng maiikling alias para sa mga karaniwang utos na gusto mong patakbuhin habang nagde-develop o nagde-deploy.
Ang isang pangunahing halimbawa ay ang pagtukoy "start": "node app.js" sa ilalim scripts, na pagkatapos ay patatakbuhin mo gamit ang npm startMas madaling tandaan at ibahagi ito kaysa sa isang mahabang command line, at palagi itong gumagana sa iba't ibang kapaligiran.
Maaari kang mag-set up ng mga script para sa pagpapatakbo ng mga pagsubok, pagbuo ng mga frontend asset, linting, paglulunsad ng mga development server, pag-seeding ng mga database, o kahit na pag-oorganisa ng mga gawain na may kaugnayan sa isang package tulad ng nodebbs . Halimbawa, maaaring mayroon kang script para patakbuhin ang mga database migration bago simulan ang forum server.
Naglalaan ang npm ng mga shortcut para sa start, test, restart, at stop, ngunit ang anumang iba pang pasadyang script ay pinapatakbo gamit ang npm run <script-name>Sa ilalim ng hood, itinatakda ng npm ang environment para ang mga lokal na naka-install na CLI ay nasa PATH, kaya naman ang mga command tulad ng webpack or jest madalas na gumagana nang walang kumpletong landas.
Mga punto ng pagpasok sa mga advanced na pakete: pangunahing, pag-export at pag-import
Para sa mga paketeng iyong inilalathala — tulad ng isang hipotetikal na nodebbs module — ang pagkontrol kung aling mga file ang makikita ng mga mamimili ay mahalaga para sa katatagan at seguridad ng API — ang mga insidente tulad ng npm typosquatting ay naglalarawan ng panganib.
Mas matanda main Ang patlang ay nakaturo lamang sa pangunahing entry file, tulad ng "main": "./index.js", at sinusuportahan sa lahat ng bersyon ng Node. Ginagawa ng mga mamimili require('your-package') makukuha ang file na iyon bilang default.
Ang mas bago exports Ang field ay mas makapangyarihan: maaari itong magtakda ng maraming entry point, suportahan ang mga conditional export batay sa environment o module system, at harangan ang access sa mga internal path na ayaw mong umasa ang mga user. Kapag exports ay naroroon, tanging ang mga landas na tahasang nakalista ang magagamit sa pamamagitan ng mga bare import tulad ng require('pkg/subpath').
An exports maaaring tukuyin ng mapa ang isang root entry sa ".", mga karagdagang subpath tulad ng "./feature", at maging ang tahasang paglalantad ng ./package.json kung kinakailangan. Nagbibigay-daan ito sa iyong maingat na hubugin ang iyong pampublikong API surface habang pinapanatiling pribado ang mga detalye ng implementasyon.
I-export ang mga pattern gamit ang * hinahayaan kang ilantad ang buong folder nang hindi inililista ang bawat file; halimbawa, "./lib/*": "./lib/*.js" ima-map ang lahat ng tumutugmang subpath. Maaari mo ring tahasang harangan ang ilang partikular na subfolder sa pamamagitan ng pagmamapa ng mga ito sa null, na pumipigil sa mga mamimili sa pag-import ng mga path na iyon.
Mga kondisyonal na pag-export at mga gusaling may kamalayan sa kapaligiran
Mga kondisyonal na pag-export nagbibigay-daan sa iyong magbigay ng iba't ibang mga file depende sa kung paano o saan ginagamit ang iyong package. Maaari kang magpadala ng isang build na na-optimize para sa import (ESM) at isa pa para sa require() (CommonJS), o kahit na hiwalay na mga build para sa Node at mga browser.
Mga kondisyon tulad ng "import", "require", "node", "node-addons", "module-sync", at "default" maaaring lumitaw sa exports bagay upang piliin ang tamang target. Halimbawa, "import": "./index-module.js" at "require": "./index-require.cjs" nagbibigay ng dalawahang suporta sa ESM/CommonJS.
Ang mga kundisyong ito ay sinusuri nang maayos, kaya dapat mong ilista ang mga ito mula sa pinaka-espesipiko hanggang sa hindi gaanong espesipiko, nagtatapos gamit ang isang "default" fallback para sa mga hindi kilalang kapaligiran. Tinitiyak nito na ang iba pang mga runtime (halimbawa, mga browser loader na gumagamit ng mga import map) ay maaari pa ring gamitin ang iyong package.
Binibigyang-daan ka rin ng Node na lumikha ng mga kondisyon, tulad ng pagkakaroon ng "node" sangay na naglalaman ng pareho "import" at "require", kasama ang isang hiwalay "default" na nagta-target ng isang universal build. Ang flexibility na ito ay partikular na nakakatulong kapag ang iyong package ay nakadepende sa mga native addon sa Node ngunit gumagamit ng polyfill sa ibang lugar — tingnan seguridad ng npm sa ilalim ng presyon.
Higit pa sa mga built-in na kondisyon, sinusuportahan ng Node ang mga kundisyong tinukoy ng gumagamit na ipinapasa node --conditions=<name>, at ang mas malawak na ecosystem ay nagtagpo sa mga susi tulad ng "browser", "types", "development", at "production" para sa mas espesyalisadong mga senaryo. Nakakatulong ang mga ito sa pag-coordinate ng kilos sa mga bundler, type checker, at runtime.
Mga pag-import ng subpath at mga internal na alias ng module
Bilang karagdagan sa exports, ang imports patlang sa package.json hinahayaan ka nitong tukuyin ang mga pribadong import specifier na balido lamang sa loob mismo ng package. Ang mga specifier na ito ay palaging nagsisimula sa # upang maiwasan ang pagbangga sa mga panlabas na pakete.
Halimbawa, maaari mong i-map "#dep" sa isang Node-native dependency sa isang kapaligiran at isang polyfill sa isa pa gamit ang conditional mappings sa ilalim ng imports. Mag-code sa loob ng iyong package pagkatapos ay gawin ito import '#dep' at awtomatikong makukuha ang tamang implementasyon.
Maaari ring gamitin ang mga subpath pattern sa loob ng imports para imapa ang mga grupo ng mga internal na file, tulad ng "#internal/*.js": "./src/internal/*.js"Lumilikha ito ng malinis at matatag na mga landas sa pag-import para sa mga panloob na module at pinapanatiling mapapamahalaan ang mga refactor nang hindi inilalabas ang mga detalye ng implementasyon sa iyong mga user.
Ang mga tuntunin sa resolusyon para sa imports salamin ang mga exports, kabilang ang mga paghihigpit na nagpapanatili sa mga landas sa loob ng root ng pakete at hindi pinapayagan ang pagtawid palabas sa node_modulesPinapanatili nito ang encapsulation at pinipigilan ang nakakagulat na pag-uugali.
Ang self-referenceing ay isa pang advanced na feature, na nagpapahintulot sa code sa loob ng isang package na i-import ang sarili nito ayon sa pangalan hangga't exports tinukoy ang mapa. Halimbawa, kung ang iyong pakete ay pinangalanang "a-package" at mga eksport "." at "./foo.js", maaaring magsulat ang mga panloob na file import { something } from 'a-package' at gamitin ang parehong entry point na nakukuha ng mga mamimili.
Iniiwasan ng pamamaraang ito ang malalalim na relatibong landas at tinitiyak na ang mga panloob na pag-import ay palaging sumasalamin sa mga hangganan ng pampublikong API na tinukoy ng exportsGumagana rin ito sa CommonJS sa pamamagitan ng require('a-package/foo.js') kapag na-export na ang subpath na iyon.
Mga tampok ng resolusyon ng module ng npm at Node magbibigay sa iyo ng mahigpit na kontrol sa kung paano ang mga kumplikadong pakete — kabilang ang mga forum engine tulad ng nodebbs — ay nakabalangkas, naipapamahagi, at nagagamit. Sa pamamagitan ng pag-master sa mga installation mode, dependency management, semantic versioning, security audit, at advanced entry‑point configuration gamit ang exports at imports, maaari kang bumuo, mag-integrate, at magpanatili ng mga sopistikadong npm package nang may kumpiyansa na nananatiling matatag at mahuhulaan habang patuloy na nagbabago ang iyong codebase at ang ecosystem sa paligid nito.