¿Por qué no puedo usar una variable como parámetro en la función require () de node.js (browserify)?

Probé algo como:

var path = '../right/here'; var module = require(path); 

pero ya no puede encontrar el módulo de esta manera, mientras:

 var module = require('../right/here'); 

Funciona de maravilla. Me gustaría cargar módulos con una lista generada de cadenas, pero no puedo envolver mi cabeza en torno a este problema. ¿Algunas ideas?

Esto se debe a la forma en que Browserify realiza su agrupación, solo puede hacer un análisis estático de cadenas para el reenlace de requisitos. Por lo tanto, si desea realizar una agrupación de browser, deberá codificar sus requisitos.

Para el código que tiene que ir a la implementación de producción (a diferencia de los prototipos rápidos, para los que rara vez se molesta en agregar paquetes), siempre es recomendable atenerse a los requisitos estáticos, en parte debido a la agrupación, pero también porque se utilizan cadenas dinámicas para proporcionarle sus requisitos significa que está escribiendo un código que no es predecible y que, por lo tanto, puede estar lleno de errores con los que rara vez se encuentra y que son extremadamente difíciles de depurar.

Si necesita diferentes requisitos en función de diferentes ejecuciones (por ejemplo, dev vs. stage testing frente a production), generalmente es una buena idea usar process.env o un objeto de configuración para que, cuando llegue el momento, decida qué biblioteca necesita para una Para propósitos específicos, puedes usar algo como

 var knox = config.offline ? require("./util/mocks3") : require("knox"); 

De esa manera, su código también se puede atravesar inmediatamente para otras personas que necesitan rastrear dónde algo va mal, en caso de que se encuentre un error.

Puede usar .require () para agregar los archivos a los que desea acceder, calculando su ruta en lugar de ser estático en el momento de la comstackción, de esta forma, estos módulos se incluirán y, cuando la llamada require() más tarde, se encontrarán.