2012-01-20 38 views
6

Hola con RequireJS puedo establecer una ruta de base de la siguiente manera: base : './app/' así que cuando estoy en ./app/foo/bar/ por ejemplo, y tengo un guión donde uso require('foo'); RequireJS entonces sería buscar ./app/foo.js y no en node_module carpeta o en ./app/foo/bar/foo.js esto es muy útil cuando tiene un tipo de estructura en la que sería mucho más limpio para usted como desarrollador ver las dependencias en lugar de tener ../../foo.js. Podría tener ./app/foo.js y ./app/foo/foo.js y ./app/foo/bar/foo.js sería mucho más limpio que tener:Node.js require() versus RequireJS?

require('foo'); 
require('foo/foo'); 
require('foo/bar/foo'); 

en lugar de:

require('../../foo'); 
require('../foo'); 
require('./foo'); 

Ahora se podría decir por qué no cambiar el nombre y no tener foo todas partes, vamos a decir que no podemos por ninguna razón ...

Otra falta de función que veo en el método de requerir del nodo contra RequireJS es la capacidad de establecer la asignación de ruta, si tengo un directorio llamado ./app/super-sized-directory-name/ en RequireJS yo podría simplemente hacer 'big-dir' : 'super-sized-directory-name' y entonces yo podría simplemente utilizar require('./app/big-dir/foo') con Node.js de exigir que el método no es posible por lo que yo sé ...

+1

[modul8] (https://github.com/clux/modul8) admite esta función a través de dominios pero la sintaxis no es compatible con el nodo.Creo que browserify solo admite rutas de archivos relativas – Raynos

+0

@Raynos ¡Hola! ¡Gracias por su respuesta! Cambié la pregunta para aclarar mi punto, eche un vistazo a modul8. A primera vista parece más complicado que navegar, lo que me gusta de browserify es que compila sobre la marcha el guión y también acepta café, que es muy bueno. – panosru

+0

@Raynos Comprobé nuevamente el modul8 y leí los documentos con más cuidado. Creo que es genial y ¡quizás lo que estoy buscando! Voy a probarlo ahora :) – panosru

Respuesta

2
--alias, -a Register an alias with a colon separator: "to:from" 
      Example: --alias 'jquery:jquery-browserify' 

Puede registrar los alias con browserify, por lo que cubre su cambio de nombre.

En cuanto a sus rutas absolutas rooteadas, eso realmente no se puede hacer. Como se menciona modul8 tiene un mecanismo de espacio de nombres para resolver esto.

Yo te recomendaría pong SubStack en #stackvm en freenode y pregúntale directamente.

+0

¿Browserify o Modul8 funcionan de forma asíncrona? Si no, me parece que requirejs sigue siendo al menos el derecho a ser utilizado para los módulos utilizados en el navegador. – Bruiser

+1

@Bruiser funcionan de manera asíncrona, lo que significa que no bloquean. Trabajan precargando todos los módulos – Raynos

+0

gracias, por lo que preferiría usar browserify sobre requirejs en un proyecto de nodo? – Bruiser

0

Puede o no puede ayudarlo, pero creo que Dojo Frameworks AMD Loader es API compatible con RequireJS y siempre que esté utilizando un nuevo microkernel no contamina el espacio de nombres global.

Creo que ahora solo tiene require() y define() en el espacio de nombres global.

De todos modos su método de hacer frente a esto es hacer algo como:

require(["dojo/node!util"], function(util){ 
    // Module available as util 
}); 

La documentación está en http://dojotoolkit.org/reference-guide/1.8/dojo/node.html

0

Uso uRequire que proporciona un 'puente' entre nodejs require y AMD define módulos, sin reinventando la rueda (se basa en los dos estándares). Básicamente convierte módulos de formato AMD o commonJS a otro formato o UMD que se ejecuta sin problemas en ambos nodejs & del navegador.

También está traduciendo caminos de dependencia con flexible path conventions, por lo que puede tener cualquiera '../../foo' o 'bar/foo' dependiendo de qué tiene más sentido en el punto donde se encuentra.

Sus módulos AMD o UMD se cargan de forma asíncrona en el navegador (usando AMD/requireJs u otro cargador AMD) y en el nodo también se simula el require(['dep1', 'dep2'], function(dep1,dep2){...}) asíncrono.