online node modules how example entries browsify javascript node.js requirejs commonjs browserify

javascript - node - Obtener browserify requiere rutas para comportarse más como requirejs



use npm in browser (3)

node_modules

Puede poner su código de aplicación (o un enlace simbólico a él, si su plataforma lo admite) bajo node_modules . P.ej:

node_modules/ +-- app/ +-- js/ +-- base/ +-- view.js +-- a/ +-- b/ +-- c/ +-- somefile.js

// somefile.js require("app/js/base/view");

Sin embargo , hay una advertencia importante: esto interrumpe la aplicación de transformaciones especificadas mediante programación a través de la API, por ejemplo:

browserify(''app/entry.js'') .transform(es6ify)

En browserify hay un concepto de archivos de "nivel superior" que entra en juego con las transformaciones. Ese concepto, y el comportamiento de las transformaciones en general, se explica pobremente en la documentación de browserify. Puede ver un poco de discusión sobre el problema aquí: substack/node-browserify#993

Pathmodify

Otra opción es mi complemento pathmodify browserify. Esto permite usar rutas no relativas y transformaciones programáticas. Para habilitar el código de navegación como:

var View = require(''base/view'');

Harías algo como:

var pathmodify = require(''pathmodify''); var opts = {mods: [ // Maps require() IDs beginning with "base/" to begin with // "/somedir/js/base/" pathmodify.mod.dir("base", "/somedir/js/base"), ]}; // Give browserify the real path to entry file(s). // pathmodify will transform paths in require() calls. browserify(''./js/entry'') .plugin(pathmodify, opts) .transform(es6ify) .bundle() ...

Conjunto

Tenga en cuenta que pathmodify solo solucionará el problema para browserify. Si necesita que las rutas como base/view también funcionen en otro contexto, como nodo, entonces si tiene enlaces simbólicos disponibles, puede combinar los dos. Por ejemplo, symlink node_modules/base a /somedir/js/base , y también configure pathmodify como se indica y continúe apuntando browserify a rutas fuera de node_modules para los archivos de entrada.

Encuentro que es un problema cuando mueves archivos y constantemente tengo que reescribir el archivo, incluyendo rutas para que sean relativas a su nueva carpeta.

Quiero evitar esto en mi código de browserify:

var View = require(''../../../../base/view'');

Y hacer algo más en línea con requirejs donde sabe que mi ruta base es js :

var View = require(''base/view'');


Deberías usar la opción de paths . No está documentado en browserify pero en node-browser-resolve resolution (usado debajo del capó):

rutas - la matriz require.paths que se usará si no se encuentra nada en la caminata recursiva normal de node_modules


Una gran opción aquí es usar el complemento aliasify , disponible here . Luego simplemente agregue algo como esto a su package.json , con todas las rutas en la configuración de aliasify en relación con la posición de ese archivo:

"browserify": { "transform": [ "aliasify" ] }, "aliasify": { "aliases": { "app": "./src/app", "components": "./src/components", "someAlias": "./src/app/some/path/to/a/place", "foobar": "./go/to/a/module/named/foobar", } }

Luego, en tus archivos, simplemente haz:

var foobar = require("foobar"); var sampleComponent = require("components/someSample"); //My JS code