Articles of commonjs

在Node.js中安全且正确地monkeypatching require函数

monkeypatching node.js中的require函数可能是有用的,特别是对于某些库。 我试图弄清楚我如何能够正确,安全地做到这一点。 这是我有什么: const Mod = require('module'); const req = Mod.prototype.require; Mod.prototype.require = function () { // do some side-effect of your own req.apply(this, arguments); }; 然而,这不是很有效,我不知道为什么。 我从debugging模块得到这个错误: TypeError: Cannot set property 'init' of undefined at Object.<anonymous> (/Users/alexamil/WebstormProjects/oresoftware/sumanjs/suman/node_modules/debug/src/node.js:15:14) at Module._compile (module.js:571:32) at Object.Module._extensions..js (module.js:580:10) at Module.load (module.js:488:32) at tryModuleLoad (module.js:447:12) at Function.Module._load (module.js:439:3) at […]

跨公共开发/浏览器开发的最佳实践

目前,我沿着IS_CJS和IS_BROWSER方向通过Google Closure Compiler使用了一些defines ,只是有不同的文件( browser.myproject.js , cjs.myproject.js等)。 这是做事的标准方式吗? 如果不是,那么它有什么优势?

对NodeJS模块开发的怀疑

我试图编写我的第一个NodeJS模块,但是我很难理解一些概念。 这是我现在的代码(一个genexer计数器/发生器): "use strict"; var ret = require('ret'); module.exports = function (regex) { if (Object.prototype.toString.call(regex) === '[object RegExp]') { regex = regex.source; } else if (typeof regex !== 'string') { regex = String(regex); } try { var tokens = ret(regex); } catch (exception) { return false; } return { charset: '', reference: [], count: function […]

共享节点js项目和网站项目之间的代码

于是我开始编写一个打字机的国际象棋引擎作为一个副项目。 我最初希望它是一个像大多数其他国际象棋引擎,通过标准input和标准输出交互的CLI。 这样我就可以将它连接到像Arena这样的GUI,并且可以对其他引擎进行testing。 为此,我决定将其作为节点项目来完成。 我将其设置为1个UCI(通用国际象棋界面)实现和其余的棋子逻辑和AI逻辑的几个文件。 在敲打我的头几次试图理解打字稿模块,我终于得到它的工作。 现在我决定自己写一个简单的GUI作为带有html + typescript + jquery的网页会很有趣。 现在,我想使用我写的所有逻辑模块,但是我发现它是不可能的。 据我所知,你不能在浏览器中使用CommonJS,所以唯一能让它工作的方式是使用内部模块,我需要修改.ts文件来将代码封装在module X{ }然后重新编译它们每当我改变一些东西的时候,只是为了GUI。 这种情况似乎很不理想,我想知道是否有办法解决这个问题。

使用Babel将ApolloClient转换为节点环境的ES5 CommonJS模块格式

使用Babel将ApolloClient转换为ES5 CommonJS模块格式 我试图使用Babel来让apollo-client模块在非浏览器节点环境中作为ES5工作。 我已经经历了下面的步骤总是给我相同的结果。 我试图找出这个结果是否是一个节点环境的正确结果。 当我将babel处理的文件导入到我的项目中并调用应该导出的方法时,即时获取,找不到模块。 对于上下文,该项目是一个fusetools.com演示。 保险丝不支持ES2015承诺,所以这个想法是,与巴贝尔es2015预设,它应该工作。 我主要是为了学习某些东西而追求这个目标,但如果能够实现这个目标,这将是一件好事。 任何意见,以更容易的方式来做到这一点,现在我了解得更好,将不胜感激。 我在这里find了代码的项目。 fusetools项目,我使用转换的代码在这里 。 我得到的错误是: LOG: Error: JavaScript error in MainView.ux line 9: Name: Fuse.Scripting.Error Error message: require(): module not found: js/apollo-client/ApolloClient.js File name: MainView.ux Line number: 9 Source line: var ApolloClient = require('js/apollo-client/ApolloClient.js'); 这是我试图达到的代码: “` "use strict"; var networkInterface_1 = require('./transport/networkInterface'); var isUndefined = require('lodash.isundefined'); […]

使用index.ts导出“默认”

我有以下的项目结构: build/ build.ts config/ config.ts index.ts … config.ts包含一个默认的导出types,如下所示: export default { myProp: { someProp: "someValue" } } 而config/的index.ts如下所示: export * from './config'; 现在我想要像这样在build.ts导入configurationtypes: import config from '../config'; 但是,当使用它(例如与config.myProp ),它告诉我, myProp不存在index.ts 。 根据这里的官方模块文档,这应该工作得很好。 我在这里错过了什么?

在nodejs / commonjs模块的根作用域中声明对象 – var或不是var?

也许这是习惯,也许是为了保持一致性,但是为什么var在模块的根范围中使用得太多(许多代码示例显示它)? 这真的有必要吗? 我的意思是模块是根作用域,所以无论你是否声明一个variables有或没有var ,你把它连接到同一个对象在这两种情况下,对不对? 你没有混淆任何命名空间,不是吗? qs = require('querystring'); // looks better than var qs = require('querystring'); // right?

如何从Node中的required()文件访问全局variables?

假设我有两个文件: main.js和module.js : //main.js const myModule = require('./module'); let A = 'a'; myModule.log(); //module.js module.exports = { log() { console.log(A); } } 当调用myModule.log , A没有定义。 有没有什么办法可以在main.js使用module.js全局variables? 谢谢。

现有节点模块的TypeScript定义文件

在我的TypeScript项目中,我想使用Logdown 。 Logdown可以在Node.js应用程序中使用,如下所示: var Logdown = require('logdown') var logger = new Logdown({prefix: 'test'}) logger.info('Hello World'); 不幸的是,Logdown不提供声明,所以我想写一个声明文件。 为了启动这个小项目,我做了以下工作: 我克隆了Logdown资源库 我在克隆的Logdown仓库的package.json文件中创build了一个“typings”条目,并指出它是否执行dist/logdown.d.ts (根据“ 在npm包中包含声明 ”) 我使用克隆的Logdown版本库作为npm包( npm link ) 我在TypeScript应用程序中运行npm link logdown ,将这个Node模块引用指向我的克隆库 之后,我创build了logdown.d.ts文件的内容: export declare class Logdown { constructor(options: Object); public info(text: string): string; } 我希望我现在可以在我的TypeScript项目中使用Logdown: import Logdown = require("logdown"); let logger: Logdown = new Logdown(); logger.info('Hello […]

typescript node.js表示路由分隔文件的最佳实践

在一个Node项目中使用Express以及Typescript,那么express.Router将成为“最佳实践”。 示例目录结构 |directory_name —server.js |–node_modules |–routes —index.ts |–admin —admin.ts |–products —products.ts |–authentication —authentication.ts 所以在index.ts里面会封装和pipe理所有的子路由器 //admin.ts (nested inside of index.ts) import * as express from "express"; export = (() => { let router = express.Router(); router.get('/admin', (req, res) => { res.json({success: true}); }); return router; })(); //index.ts (master file for express.Router) import * as express from […]