我使用单独的路由器文件作为主应用和auth app的模块.我无法获得将变量(db client)传递到路由器的最佳方法.我不想硬编码或传递它:
module.exports = function(app, db) {
Run Code Online (Sandbox Code Playgroud)
也许这是使用单例寄存器或使用全局db变量的最佳方法?
您对设计模式的体验是什么?哪种方式最好,为什么?
如果没有,首先,我会全力以赴编写我的所有模块
import A from './a.js';
var B = function(){
//use A
};
export default B;
Run Code Online (Sandbox Code Playgroud)
然后使用编译器将其构建为某种浏览器或服务器格式.
然而,我的一个问题与上面的明确规范./a.js中import.
我理解为什么规范这样做1,赞成静态分析.但是有两个非常实际的原因可以解释为什么在模块的文件名和路径中烘焙都很麻烦.
import myModule from './../../vendor/lib/dist/mod.js'到模块的代码中并不能完全让我感到前瞻性.除了路径本身,指定文件名也会让你失望.像这样的东西似乎是无辜的:
import $ from 'vendor/jquery.js'
但是,当我想使用Zepto而不是jQuery时呢?我发现抽象,尤其是供应商库的抽象,在处理大型代码库,自以为是的开发人员和不断变化的JavaScript生态系统时非常有用.我今天可能想要将React导入我的组件库,但明天呢?如果我要在客户端和服务器上使用相同的模块,但是我需要不同版本的依赖库,该怎么办?
我在团队中坚持强大(但清晰且一致)的抽象.通常,抽象采取某种命名空间的形式.我幻想一下这个:
//BAD: Bakes React into my component modules
import ComponentLib from './React.js';
//GOOD: Leaves me free to use any React-like library
import ComponentLib from 'vendor.lib.component';
Run Code Online (Sandbox Code Playgroud)
其中 …
我目前正在使用requirejs来管理模块js/css依赖项.我想发现节点通过集中配置文件执行此操作的可能性.所以不要手动做类似的事情
define([
'jquery'
'lib/somelib'
'views/someview']
Run Code Online (Sandbox Code Playgroud)
在每个模块内.
我有节点注入依赖关系,即
require('moduleA').setDeps('jquery','lib/somelib','views/someview')
Run Code Online (Sandbox Code Playgroud)
无论如何,我对任何寻找节点依赖注入的项目感兴趣.
谢谢