Articles of 需要

需要在nodeJS中从一个固定的根相对访问模块

我试图访问模块,但嵌套有点失控 require("../../../Folder/Deeper/someFile") 反正只要使用require("Folder/Deeper/somefile") 我试过设置 require.paths = ['/media/work/Project']; 但是这似乎不起作用,对我来说也感觉有点难看。 有没有其他的select。 有没有什么办法来写这个包装呢?

如何避免节点需要加载相同的模块两次

我正在开发一个节点模块my-module ,而这又取决于另一个模块other-module 。 other-module是一个在我的模块的package.json中明确列出的依赖项。 因为我other-module只是通过require d来修改other-module模块的行为,所以重要的是other-module other-module只require加载一次,并且这个一次性的“实例”是在任何需要my应用程序中引用的实例和other 。 我期望这根据节点的模块caching策略保持真实,但是我在写一个简单的testing应用程序时遇到了这样的情况: 如果my-module是npm install 在 other-module 之前,那么后者是作为前者的依赖而引入的。 npm install other-module再次将其带入node_modules层次结构中。 然后,当我的模块需要other-module ,节点加载我的模块的“本地”副本,当应用程序require时,节点再次加载它(这次是由于第二次npm install而安装的版本)。 这显然不是预期的结果。 如果my-module是npm installe 在 other-module那么我最终只有一个在node_modules other-module的副本,我的testing应用程序按预期工作。 这种行为让我再次查看节点的相关策略,果然我遇到了“模块caching警告”: 模块基于他们parsing的文件名被caching。 由于模块可能会根据调用模块的位置(从node_modules文件夹加载)parsing为不同的文件名,因此不能保证require('foo')将始终返回完全相同的对象,如果parsing为不同的文件。 在这一点上,它看起来像我的模块可能会或可能不会像预期的取决于npm install的顺序。 我有什么最佳做法吗? 有没有办法避免这个混乱,而不改变我的模块的工作方式?

为什么我们需要传递module.exports作为参数,因为我们已经将模块作为parameter passing了?

我一直在浏览一些关于Node.js的在线教程。 我所理解的是,在使用require(./file-path)函数时,节点获取该文件的内容并包装在一个即时调用函数 (function(exports, require, module, __filename, __dirname) { // content }()) 我明白exports和module.exports之间的区别。 这就是我在互联网上看到的关于search上述问题的全部内容。 但是,我的问题是,为什么我们需要将module.exports和module传递给包装IIFE? 我们可以单独传递模块,然后从中获取module.exports 。 这样做有什么好处吗? 通常,当我们将一个对象传递给一个函数时,我们不必另外传递object.property 。

Node.js – 需要mongoose在这里和那里造成冗余?

我有以下的Node.js目录结构。 |–app/ |–app.js |–routers/ |–index.js/ |–models/ |–schemas.js |–post.js 在app.js中 ,有一行喜欢这个mongoose.connect('mongodb://localhost/' + config.DB_NAME); 。 在schema.js中 : var mongoose = require('mongoose') , Schema = mongoose.Schema , ObjectId = Schema.ObjectId; var PostSchema = new Schema({ title: String , author: String , body: String , creataAt: { type: Date , default: Date.now } }); // other schemas goes here […]

在Node中,如何在eval中需要文件?

我有两个文件test.js和x.js ,在同一个目录中: test.js : console.log(eval( "require('x.js')" )); x.js是空的。 预期 : require返回undefined ,所以没有logging。 实际 : node test.js给我Error: Cannot find module 'x.js' (为了简洁,省略了堆栈跟踪)。 情况听起来类似于这个其他问题 ,与我已经使用eval而不是new Function的差异,并require 被定义,只是意外地工作。 为什么是这样? 如何正确地require eval代码中的模块?

节点JS需要抛出AssertionError:缺lesspath

我被困在一个问题几个小时,但无法find它。 我有一个简单的应用程序写入节点js: var mongo = require('./helpers/mongo_utils.js'); var express = require('express'); var user = require('./models/users.js'); mongo.connect(function (err) { if (err) throw err; console.log('connected'); var app = express(); app.listen(3000, function () { console.log('Server set up and start listening on port 3000'); }) }) 所有作品除了我需要的users.js文件。 如果我不需要它,我没有问题,但是当我这样做时,我得到了这个错误: assert.js:89 throw new assert.AssertionError({ ^ AssertionError: missing path at Module.require (module.js:363:3) at […]

要求使用TypeScript,SystemJS和Electron的nodejs“child_process”

我正在研究一个简单的nodejs 电子 (以前称为primefaces壳)项目。 我正在使用angular 2编写它,使用项目相同的项目设置,他们build议在typescript的文档中: TSC: { "compilerOptions": { "target": "es5", "module": "system", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "removeComments": false, "noImplicitAny": false }, "exclude": [ "node_modules", "typings/main", "typings/main.d.ts" ] } 我需要运行一个命令,我发现我可以用节点“child_process”来完成。 无论如何我无法find“导入”或“要求”,而从node.d.ts文件中使用它的types。 我在node.d.ts文件中find了适合我需要的“child_process”接口,这就是它在node.d.ts文件中的样子: declare module "child_process" { import * as events from "events"; import * as stream from "stream"; export interface ChildProcess […]

在node.js中处理`exports`的build议

理论: 其中一个吸引我关于node.js的东西是使用它作为命令行工具。 从理论上说,我可以用Javascript编写库,并将它们放在我的~/.node_libraries目录中,然后我可以重用这些库。 所以举例来说,我在~/.node_libraries有一个text.js ~/.node_libraries ,它有一堆反复使用的文本相关函数( depunctuate() , tokenize_text() )。 这样做的text.js在于,我可以使用与我的命令行脚本和服务器端相同的text.js文件。 现在我正在用Python处理所有文本处理的东西,但我只想坚持一种语言。 实践: AFAICT,为了创build一个node.js模块,我必须将所有我想要的东西都附加到exports或者this 。 也就是说,在text.js ,我必须这样做: exports.depunctuate = depunctuate 要么 this.depunctuate = depunctuate 如果我使用exports ,我在使用库服务器端àla时遇到问题: <script src=text.js></script> 因为那我得到出口没有定义的错误。 如果我使用this ,我会避免这个错误,但是我导出的所有东西都会被附加到窗口对象上。 有没有办法可以设置这些避免这两个问题的库? 例如,是否有一些方法可以包装导出导出,以便var对于节点显而易见,但是不能在服务器上的纯Javascript文件中使用。

Node.js require()vs RequireJS?

你好与RequireJS我可以设置一个基本path是这样的: base : './app/'所以当我在./app/foo/bar/例如,我有一个脚本,我使用require('foo'); 然后RequireJS将search./app/foo.js而不是在node_module文件夹或./app/foo/bar/foo.js当你有一种结构对于你来说会更清洁开发者可以看到依赖关系,而不是拥有../../foo.js 。 我可以有./app/foo.js和./app/foo/foo.js和./app/foo/bar/foo.js它会更清晰: require('foo'); require('foo/foo'); require('foo/bar/foo'); 而不是: require('../../foo'); require('../foo'); require('./foo'); 现在你可以说,为什么不改变名称,并没有到处都有foo,让我们说,我们不能以任何理由… 在RequireJS中,我在节点的require方法中看到的另一个缺乏的特性是设置path映射的能力,如果我在RequireJS中有一个名为./app/super-sized-directory-name/的目录,我可以简单地执行'big-dir' : 'super-sized-directory-name' ,然后我可以简单地使用require('./app/big-dir/foo')和Node.js的require方法,这是不可能的,据我所知…

浏览捆绑电子应用程序的主要进程文件

我正在构build一个电子应用程序,目前使用browserify渲染器(网页)文件像任何其他的JavaScript前端。 我也想用browserify捆绑主要的进程文件。 但是,bro​​wswerify无法find像剪贴板,ipc,浏览器窗口,应用程序等模块内置的电子… 在我的main.js文件中,它是电子应用程序的入口点。 我有: const ipc = require('ipc'); const clipboard = require('clipboard'); const BrowserWindow = require('browser-window'); const app = require('app'); const yargs = require('yargs'); const yargs会正常加载,因为它在node_modeuls文件夹中,而browserify可以解决这个问题。 然而,其他四个项目不能被browserifyfind,因此失败了我的构build。 [11:49:17] Finished 'development' after 17 ms Error: Cannot find module 'ipc' from '<path>' Error: Cannot find module 'clipboard' from '<path>' Error: Cannot find module 'browser-window' from '<path>' […]