Com utilitzar paquets npm al navegador amb Browserify

Darrera actualització: 03/16/2026
  • Els navegadors no tenen suport natiu per a la funció require de Node, de manera que els mòduls npm d'estil CommonJS no es poden executar directament en JavaScript del costat del client.
  • Browserify analitza un fitxer d'entrada com ara main.js, segueix totes les crides require i agrupa totes les dependències en un únic fitxer JavaScript preparat per al navegador.
  • La instal·lació de mòduls amb ordres com ara npm install uniq permet a Browserify extreure paquets de node_modules i integrar-los al bundle.js generat.
  • Incloure bundle.js mitjançant una etiqueta de script estàndard a HTML permet que el codi modular basat en npm s'executi sense problemes al navegador com un únic actiu optimitzat.

navegador de paquets npm

Quan comences a treballar amb mòduls de JavaScript, una de les primeres friccions que trobes és la bretxa entre com Node.js carrega el codi i com ho fan els navegadors. A Node només cal trucar require() i tot s'enllaça màgicament. Però prova el mateix directament al navegador i descobriràs ràpidament que aquesta funció simplement no existeix allà. Aquí és exactament on les eines, els fluxos de treball i els conceptes al voltant d'un navegador de paquets npm i agrupadors com Browserify intervenen per salvar el dia.

Aquest article us guiarà a través de com npm com a ecosistema de paquets es combina amb la idea de navegar, descobrir i finalment agrupar aquests paquets perquè realment s'executin en un navegador web. Revisarem un exemple clàssic basat en Browserify i explicarem per què require funciona a Node però no al navegador, i mostra pas a pas com passar d'un petit fitxer de script a un únic recurs agrupat que podeu deixar anar a una pàgina web amb una simple etiqueta de script. Al llarg del camí, també donarem context, consells pràctics i algunes alternatives modernes perquè tot el flux de treball tingui sentit per a projectes del món real.

Entendre la bretxa entre Node.js i el navegador

Integració del navegador Node.js npm

El punt de partida clau és que els navegadors web i Node.js ofereixen sistemes de mòduls molt diferents des del primer moment. Històricament, Node ha utilitzat el format de mòdul CommonJS, on es carreguen les dependències mitjançant require('package-name') i exposar la funcionalitat amb module.exportsAquest patró està profundament integrat en el temps d'execució de Node, però els navegadors tradicionals no en saben res.

En un entorn de navegador senzill no hi ha cap funció integrada require funció, ni tampoc hi ha suport per als mòduls d'estil CommonJS en què es basen la majoria de paquets npm. El navegador entén les etiquetes de script clàssiques que carreguen fitxers JavaScript globalment i, en entorns més moderns, admet mòduls ES amb type="module" atribut, però encara no entén la semàntica CommonJS de Node per si sola.

Aquesta diferència esdevé un problema tan bon punt intenteu reutilitzar codi d'estil Node o paquets npm directament dins del JavaScript del costat del client. Potser teniu un fragment senzill com ara var unique = require('uniq') això funciona perfectament en un script de Node, però si enganxeu la mateixa línia en un fitxer carregat al navegador, obtindreu instantàniament un error de referència, perquè require no està definit.

Per tant, els desenvolupadors necessiten algun tipus de "pont" que els permeti continuar escrivint codi similar a Node i alhora distribuir recursos compatibles amb el navegador. Aquest pont sol ser un agrupador: una eina que recorre el gràfic de dependències a partir d'un fitxer d'entrada, recopila tot el que es requereix i genera un únic paquet de JavaScript que el navegador pot executar sense saber res de Node o npm.

Què fa Browserify a l'ecosistema npm

Browserify és una de les primeres i influents eines que va resoldre exactament aquest repte per als desenvolupadors de JavaScript. El seu objectiu és senzill: permetre't escriure codi amb Node. require pattern, extreure mòduls de npm i després empaquetar-ho tot en un sol fitxer que s'executa al navegador com si CommonJS fos compatible de forma nativa.

Des d'una perspectiva de navegació de paquets npm, Browserify converteix eficaçment el gegantí ecosistema de paquets Node en una biblioteca de possibles dependències del costat del client. En comptes de copiar manualment els scripts, simplement instal·leu un mòdul des de npm, utilitzeu require() igual que en el codi del costat del servidor, i confieu en Browserify per traduir-ho en alguna cosa que els navegadors dels vostres usuaris puguin entendre.

Internament, Browserify recorre tots els mòduls als quals es fa referència mitjançant require, partint d'un fitxer d'entrada donat, i construeix un graf de dependències. Per a cada mòdul d'aquest gràfic, reescriu el codi en una forma que emula l'entorn CommonJS al navegador, incloent-hi l'abast local i una opció amigable per al navegador. require implementació. L'artefacte final és un fitxer de paquet únic, comunament anomenat bundle.js, que encapsula tots aquests mòduls.

El resultat final és un flux de treball on els desenvolupadors front-end poden confiar en paquets de npm sense preocupar-se per la manca de suport natiu del navegador per als mòduls Node. Obtindreu accés a un enorme catàleg de biblioteques per a tasques com la manipulació de dades, utilitats o ajudants d'IU, però encara servireu només un fitxer de script al client, integrant-se sense problemes a les pàgines HTML tradicionals.

Reescriptura de l'exemple clàssic del tutorial de Browserify

Per fer-ho tot concret, imagineu-vos que teniu un únic fitxer JavaScript anomenat main.js al vostre projecte i voleu utilitzar un paquet npm anomenat uniq per filtrar valors duplicats d'una matriu. En un entorn Node, començaríeu el fitxer amb una línia com ara var unique = require('uniq')Aquesta línia importa la funció exportada des del uniq mòdul i l'emmagatzema en una variable anomenada unique.

Dins d'això main.js fitxer, podeu crear una matriu simple de números que contingui entrades repetides. Per exemple, podeu configurar var data = , on certs nombres apareixen més d'una vegada. L'objectiu és produir una nova matriu que inclogui cada nombre només una vegada, ordenats.

Si utilitzem la funció importada, la resta del codi esdevé molt senzill. Pots invocar console.log(unique(data)) per imprimir a la consola la matriu retornada per uniq paquet, que elimina els valors duplicats de la llista. Si executeu això a Node, veureu una matriu de sortida en què cada número només apareix una vegada.

Tota aquesta lògica pressuposa que uniq el mòdul està disponible al vostre entorn i que el require funció està definida i és capaç de resoldre-la. A Node, això ho gestiona el temps d'execució i el Algoritme de resolució de mòduls de nodes, que busca un directori anomenat node_modules i després per a una carpeta anomenada uniq dins d'ella.

Instal·lació del paquet uniq des de npm

Abans que el vostre codi pugui cridar require('uniq'), heu d'instal·lar el paquet des del registre npm. Això es fa des de la línia d'ordres utilitzant el client npm que ve inclòs amb Node.js. Des de la carpeta del vostre projecte, podeu executar una ordre com ara npm install uniq de manera que npm descarregui el mòdul i l'emmagatzemi sota el node_modules directori.

La npm install uniq la instrucció obté la versió publicada del uniq paquet i l'afegeix a les dependències del projecte local. Depenent de la configuració de npm i de si utilitzeu un package.json fitxer, també podria registrar el paquet a la vostra llista de dependències, garantint instal·lacions coherents entre entorns per a altres desenvolupadors del vostre equip.

Un cop instal·lat el paquet, l'estructura de directoris del projecte inclou un nou node_modules/uniq carpeta que conté el codi d'aquest paquet. Això és precisament el que permet a Node require sistema per localitzar el mòdul quan es resolgui 'uniq'La mateixa carpeta és la que examinarà Browserify quan comenci a construir el gràfic de dependències per al vostre paquet.

En aquest moment, el vostre main.js El fitxer és codi Node perfectament vàlid que es pot executar al servidor o des d'un terminal utilitzant l'intèrpret estàndard de Node. Tanmateix, si simplement deixeu anar això main.js fitxer a una pàgina web mitjançant una etiqueta de script, el navegador encara no entendrà aquesta importació d'estil CommonJS, de manera que necessiteu un pas addicional per preparar-lo per al navegador.

Agrupació de main.js i les seves dependències a bundle.js

El pas crucial que permet que aquest codi d'estil Node s'executi al navegador és permetre que Browserify processi main.js i tots els seus mòduls necessaris, i després emeten un únic fitxer JavaScript que normalment s'anomena bundle.js. Podeu fer això des de la línia d'ordres un cop Browserify estigui instal·lat globalment o localment al vostre projecte.

Una ordre típica per activar aquest procés podria ser així: browserify main.js -o bundle.js. Aquí, browserify és l'executable que inicia el procés d'agrupació, main.js és el fitxer d'entrada que Browserify tracta com l'arrel del graf de dependències, i -o bundle.js indica a l'eina que escrigui el paquet resultant en un fitxer anomenat bundle.js al directori actual.

Darrere de les càmeres, anàlisis de Browserify main.js, segueix cada require l'anomena finds i explora recursivament cada mòdul importat. Això inclou els vostres propis fitxers locals si els necessiteu amb camins relatius, així com mòduls de tercers que viuen sota node_modules, com ara el uniq paquet que acabes d'instal·lar des de npm.

Cada dependència que troba Browserify es transforma perquè pugui executar-se dins del navegador sense necessitat de l'entorn natiu de Node. Encapsula cada mòdul en el seu propi àmbit, simula la interfície CommonJS i agrupa tots aquests mòduls transformats en un sol script. El resultat bundle.js el fitxer conté codi que imita el require funció i permet que el vostre original var unique = require('uniq') línia es comporti correctament quan s'executi al costat del client.

Un cop finalitzat Browserify, només us queda un fitxer JavaScript que captura la lògica original de l'aplicació més tot l'arbre de dependències transitives necessari per fer-lo funcionar. Aquest fitxer ja està llest per ser referenciat en una pàgina HTML com qualsevol altre script, sense cap configuració addicional per part del navegador.

Carregant el paquet Browserify en una pàgina HTML

Amb bundle.js generat, integrar-ho tot en un lloc web normal és tan senzill com afegir una sola etiqueta de script al vostre HTML. En lloc d'intentar carregar main.js directament, feu referència al paquet compilat que ha produït Browserify, que ja inclou uniq i qualsevol altre mòdul npm que pugueu necessitar.

Un fragment HTML bàsic podria contenir alguna cosa com ara <script src="bundle.js"></script> en algun lloc abans del tancament </body> tag. Aquesta etiqueta de script indica al navegador que descarregui i executi el bundle.js fitxer. Com que el paquet emula l'entorn CommonJS dins seu, les vostres crides a require funcionar internament tot i que l'entorn global del navegador encara no té ni idea de quina és aquesta funció.

Des del punt de vista de la pàgina, no hi ha cap diferència visible entre aquest paquet i qualsevol altre fitxer JavaScript que pugueu incloure. La complexitat dels mòduls, les dependències internes i la simulació require la lògica està tota encapsulada a l'interior bundle.jsEl navegador només ha de carregar un recurs i executar-lo, cosa que també té avantatges de rendiment en comparació amb la càrrega de molts fitxers petits separats.

Per això, el flux de treball s'adapta perfectament fins i tot a piles de front-end més antigues on podeu treballar amb fitxers HTML estàtics o plantilles renderitzades pel servidor. No cal que canvieu radicalment la manera com estructureu les vostres pàgines; només heu de canviar la manera com prepareu el JavaScript que serviu, substituint múltiples recursos dispersos i mòduls només de Node amb un paquet optimitzat produït per Browserify.

Per què és important agrupar amb Browserify per a la navegació de paquets npm

Quan la gent parla d'un "navegador de paquets npm" o de navegar per paquets npm per a ús front-end, la pregunta subjacent sol ser: com puc utilitzar realment aquest mòdul en un projecte basat en navegador? L'existència d'eines com Browserify converteix un catàleg teòric de biblioteques del costat del servidor en una caixa d'eines pràctica que podeu aplicar directament a les vostres aplicacions web.

A la pràctica, això significa que explorar npm per a mòduls útils ja no es limita al treball de Node o de backend. Si trobeu una petita biblioteca d'utilitats que funcioni únicament amb estructures de dades de JavaScript i no depengui d'API específiques de Node, hi ha una alta probabilitat que la pugueu consumir al navegador combinant-la amb Browserify o una eina similar. Això amplia enormement les vostres opcions a l'hora de resoldre problemes com la deduplicació de matrius, la transformació de dades o la implementació de petits algoritmes.

A més, l'agrupació redueix el nombre de sol·licituds de xarxa que la pàgina web ha de realitzar en carregar-se. En lloc d'incloure etiquetes de script separades per a cada fitxer local o biblioteca distant, tot es consolida en un sol bundle.js actiu. Això funciona bé amb la memòria cau HTTP i pot simplificar les pipelines de desplegament, especialment quan es tracta d'aplicacions complexes que depenen de molts mòduls npm.

Des del punt de vista del manteniment, poder confiar constantment en require i la gestió de dependències de npm fa que la base de codi front-end sembli més predictible i modular. Instal·leu, actualitzeu i elimineu mòduls mitjançant ordres npm, auditeu les dependències centralment i deixeu que Browserify gestioni la transformació necessària per a la compatibilitat del navegador, en lloc de copiar manualment fitxers o incrustar codi de tercers de maneres ad hoc.

Relació amb les eines modernes de JavaScript

Tot i que l'exemple clàssic que hem vist se centra específicament en Browserify, el patró fonamental que il·lustra encara sustenta moltes eines modernes de compilació de front-end. Els paquets més nous com ara Webpack, Rollup, Parcel o Vite també aborden el problema de convertir mòduls escrits en un estil en paquets que els navegadors poden executar de manera eficient.

Els navegadors moderns ara admeten mòduls ES de forma nativa a través de <script type="module">, que canvia part de la imatge però no elimina la necessitat de passos de compilació compatibles amb npm. Molts paquets de l'ecosistema npm encara exposen punts d'entrada de CommonJS o depenen de la resolució d'estil Node, i fins i tot quan hi ha disponibles compilacions de mòduls ES, l'agrupació continua sent valuosa per a l'optimització, la tree-shaking i un comportament de càrrega consistent.

En aquest context més ampli, el petit exemple que utilitza require('uniq'), npm install uniq I a browserify main.js -o bundle.js La comanda és més que un tutorial trivial. Demostra el procés bàsic d'"escriure codi modular, instal·lar dependències des de npm i després produir un paquet compatible amb el navegador", un patró compartit per gairebé totes les configuracions front-end serioses actuals, fins i tot si les eines específiques difereixen.

Entendre com funciona Browserify, per tant, facilita el raonament sobre les piles més noves. En lloc de tractar els agrupadors moderns com a caixes negres, podeu veure la similitud: tots llegeixen fitxers d'entrada, segueixen importacions o requisits, recopilen dependències, transformen el codi i generen paquets que el navegador carrega mitjançant etiquetes de script simples. L'ecosistema de paquets npm, el sistema de mòduls i l'agrupador junts creen una experiència que es percep com una fluidesa en el desenvolupament diari.

Reunint-ho tot en un flux de treball pràctic

Per recapitular el flux de treball pràctic que implica l'exemple original, comenceu escrivint el codi de l'aplicació en un fitxer com ara main.js ús require per importar qualsevol mòdul npm que vulgueu utilitzar. En aquest fitxer podeu trucar var unique = require('uniq'), defineixen matrius com i registra els resultats a la consola. Conceptualment, treballes com si tot això s'executés sota Node.

El següent pas és assegurar-vos que aquests mòduls existeixen realment al vostre projecte instal·lant-los amb npm, per exemple a través de npm install uniq. Aquesta acció pobla el node_modules directori, donant tant a Node com a Browserify accés al codi del mòdul perquè es pugui resoldre i incloure on calgui.

Un cop el codi i les dependències estiguin al seu lloc, indiqueu a Browserify que recopili recursivament tot a partir del fitxer d'entrada executant una ordre com ara browserify main.js -o bundle.js. Aquest procés recorre l'arbre de dependències, encapsula cada mòdul per imitar un entorn CommonJS al navegador i finalment escriu bundle.js com l'únic fitxer inclòs que conté tot el codi necessari.

Finalment, canvieu al vostre HTML i feu referència només a aquest fitxer de sortida únic amb una etiqueta de script convencional com ara <script src="bundle.js"></script>. No cal cap sintaxi especial a la pàgina; la complexitat rau completament dins del paquet. El navegador descarrega i executa bundle.js, i el codi que hi ha dins s'executa com si el require la maquinària es va integrar al mateix navegador.

Seguint aquest patró, s'aconsegueix reduir la bretxa entre el sistema de mòduls de Node i l'entorn del navegador, alhora que es continua beneficiant de l'enorme ecosistema de paquets npm. Navegueu pels paquets, els instal·leu, els necessiteu i després envieu un fitxer optimitzat als vostres usuaris, mantenint tant l'experiència de desenvolupament com l'entorn d'execució manejables i eficients.

Vist des d'una perspectiva d'alt nivell, la combinació de mòduls npm d'estil Node i un paquet com ara Browserify transforma una col·lecció dispersa de fitxers JavaScript en un pipeline d'actius coherent i llest per al navegador. Els desenvolupadors poden escriure codi modular, dependre de paquets mantinguts per la comunitat i, alhora, lliurar un únic script a les seves pàgines web, fent que el desenvolupament modern de JavaScript sigui escalable i accessible a través d'eines i entorns.

ataque Shai-Hulud a la cadena de subministrament de npm
Article relacionat:
Shai-Hulud: el ataque que sacude la cadena de suministro de npm
Articles Relacionats: