Tag: commonjs

Common.js和Node.js的工厂模式

我明白了,我希望有一个工厂在一个地方pipe理我所有模块的依赖关系,而不是在我的代码中使用大量的语句。 我已经看过一些依赖于AMD的方法,但是我想知道如何使用node.js / express与OOB模块加载器(我认为它使用common.js)结合使用。 我一直在想着做这样的事情: module.exports = { lib:[], load:function(name){ if(this.lib[name]!==undefined && this.lib[name]!==null){ return this.lib[name]; } switch(name) { case 'express': this.lib[name] = require('express'); break; case 'morgan': this.lib[name] = require('morgan'); break; case 'body-parser': this.lib[name] = require('body-parser'); break; } console.log(this.lib); return this.lib[name]; } }; 有人说这不仅仅是一个工厂的中介模式,我只是想说明一下我的观点。 我的基本要求是处理来自系统中单个位置的所有依赖关系,如果需要更改依赖关系,则只需在此文件上对其进行更改,然后通过整个系统自动更新。 那么有没有更好的方法来处理这个问题? 任何已经完成这个方法的实现? 谢谢!

React Native如何要求(moduleName)工作?

我在反应本机源代码中看到类似var Animated = require('Animated')代码。 但是,怎样才能解决这个问题呢? 我的猜测是,包装者将通过注册等方式进行预处理,我希望在我自己的项目中做到这一点。 但似乎没有反应 – 本地的包装者的文件,我无法find这个“注册”发生的源代码。

跨多个模块的TypeScript模块扩充

我试图修改另一个模块内的对象的原型(类似于这里所示 )。 但是,模块扩充似乎只在增加在同一模块中的所需文件中声明的对象而不是另一个模块时才起作用。 例如,我有一个类, TestClass : // some-module/TestClass.ts export class TestClass { someValue: string = "hi"; someFunc(): number { return 5; } } 在同一个模块中,我有这个: // some-module/index.ts import { TestClass } from "./TestClass"; declare module "./TestClass" { interface TestClass { doSomethingElse(): void; } } TestClass.prototype.doSomethingElse = function(): void { console.log("Something else"); }; 这工作正常。 但是,如果我将TestClass移动到另一个模块( test-module/TestClass.ts )并像这样适当地修改代码,它会给我提供错误'TestClass' […]

CommonJS为什么不要求函数asynchronous?

在加载CommonJS模块时,我们使用require语句,它是同步的。 但是不加载模块涉及从磁盘读取它们并解释它们。 所以在一个我们提倡非阻塞I / O的设置中,如何实现同步? 更新: 我已经看到并在客户端使用requireJS,并可以欣赏它的asynchronous性。 我想知道的是,为什么在服务器上做这种事情并不普遍(我知道requireJS可以在Node中使用,但这不是重点)。 另外我想知道是否需要在我的代码内联模块使我的代码阻塞,如果这是一个不好的做法,应该避免。

nodejs中的module.exports – fn vs object

我试图理解以下两个替代表示之间我认为是相同的function之间的区别。 apiRegistry1.js module.exports = function () { var apiRegistry = {}; var files = fs.readdirSync('./apis'); for (var index in files) { var fileName = files[index]; var module = fileName.split('.')[0]; apiRegistry[module] = require('../apis/' + module); } // console.log(apiRegistry) –> Prints {key: moduledef ..} return apiRegistry; }; VS apiregistry2.js var apiRegistry = {}; var files = fs.readdirSync('./apis'); […]

多个require()来自同一个模块中的同一个库

我正在寻找NodeJs的@ slack / client npm软件包的源代码,并在顶部看到他们有这个: var forEach = require('lodash').forEach; var bind = require('lodash').bind; var has = require('lodash').has; var isArray = require('lodash').isArray; var isEmpty = require('lodash').isEmpty; var isObject = require('lodash').isObject; 当樱桃采用所有这些从lodash模块中挑选的时候,你可以通过只包含整个库文件,然后使用你需要的方法来使它更简洁。 // Include the whole lib var _ = require('lodash'); // And later if (_.isObject(…)) // etc 这不像他们多次使用每种方法。 实际上,大多数只使用一次或两次。 而且,我的理解是,即使部分需要部分模块,整个事情也是eval() ,所以内存和性能都没有优势。 我觉得这个软件包写得很好,所以我很好奇,为什么他们select这样做。

未find未捕获的模块jqueryify

我的情况 我正在检查spine.js的Web应用程序,我正在考虑编写。 我已经阅读了所有的文档,并通过了所有的例子。 现在我试图在我自己的Windows 7笔记本电脑上运行spine.contacts示例项目。 我正在运行Windows的节点v0.6.6 我做了什么 已安装节点 通过NPM安装脊柱,脊柱应用程序和下摆 提取spine.contacts在一个文件夹中 运行npm install . 里面的文件夹,其中创build了一堆目录里面,包括jqueryify node_modules文件夹 运行hem server以启动testing服务器 基本上遵循了所有的信函的指示 问题 在Chrome(http:// localhost:9294)中运行应用程序,JavaScript会在index.html中的第9行引发exception(我在下面包含了index.html)。 它读取“未捕获的模块jqueryify未find”。 我知道jqueryify的依赖是由npm早些时候安装的,但我仍然尝试删除该行,并手动链接到jQuery中。 现在我得到了application.js中的“Uncaught module index not found”错误。 这当然不是一个依赖错误,因为index.js文件是本地的,它是项目中的主脚本文件。 所以看起来require函数有问题。 我GOOGLE了很多,没有发现我已经表明,spine.js不应该在Windows上工作。 有任何想法吗? 一些链接 Spine.contacts的GIT页面 herokuapp.com上完全相同的项目演示 index.html的: <!DOCTYPE html> <html> <head> <meta charset=utf-8> <title>App</title> <link rel="stylesheet" href="/application.css" type="text/css" charset="utf-8"> <script src="/application.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8"> […]

如何为具有构造函数的外部commonjs模块编写TypeScript声明文件?

请参阅更详细的问题: 如何为具有构造函数(如imap)的复杂外部commonjs模块编写TypeScript声明文件? 我为一个Node.js应用程序编写了TypeScript,我想为模块级别的构造函数编写一个JavaScript模块(可从npm获得)的TypeScript声明文件。 以下是相关代码的简化版本,位于文件a.js中 : function A(config) { this.state = 'constructed'; } A.prototype.update = function() { this.state = 'updated'; }; module.exports = A; 和一个简化的JavaScript应用程序app.js ,它使用模块a : var mod = require('a'); var i = new mod({}); console.log('i.state=' + i.state); i.update(); console.log('i.state=' + i.state); 如何为模块a.js编写TypeScript声明文件? 我已经阅读了TypeScript的写作定义(.d.ts)文件指南,但不幸的是,我无法弄清楚如何将这些指导原则应用于这种情况。 更新为包含接口 这是我的声明文件adts : declare module 'a' { import events = require('events'); […]

支持ES6模块语法和CommonJS

所以我有这个简单的模块: export default function(){} 如果我不使用export default ,那么TypeScript编译器会写一个警告,说我的“模块没有默认导出”,我想避免。 所以要使用这个模块,我们会这样做: import fn from 'my-module'; 这一切都很好,但如果我想使用CommonJS导入它呢? 那么我必须这样做: const fn = require('my-module').default; 这对用户来说很尴尬。 有没有办法解决?

包装要求

特定 3 Node.js项目Main – Framework – 存储库 Main有两个通过npm链接连接的项目。 在一个testing中,我将这个require包装在一个方法中。 解决链接项目时遇到了一些问题(细节见下文) 简化的代码如下所示: module.export.resolve = function(file){ […]//Some more logik to handle relative pathes return require(file) } 这在大多数情况下工作正常。 我也努力去处理亲戚的问题(寻找调用者并根据这个path应用程序) 现在,这是在项目框架链接(NPM链接) 项目主 。 项目主要也有项目存储库链接。 现在在项目主要我有: require('ProjectRepositories/foo') // Works as expected myRequire.resolve('ProjectRepositories/foo') // Returns MODULE_NOT_FOUND "Cannot find module 'ProjectRepositories/foo' 我假设这个问题是, 仓库项目没有链接在框架项目 。 但有没有其他的方式,而不是链接它们? 我宁愿有更less的依赖关系。 有什么提示?