Articles of path

Node-gyp找不到msbuild.exe

您好,我是在Windows上创build本地节点模块的过程,但每当我运行node-gyp build binding.gyp命令我得到一个错误,指出"error: Can't find "msbuild.exe". Do you have Microsoft Visual Studio C++ 2008 installed?" 。 我安装了Visual Studio 2013,msbuild目录是C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe. 我尝试添加到PATHvariables,我能够启动cmd提示符,并运行msbuild.exe ,它会返回版本,似乎工作,但由于某种原因node-gyp无法检测到,我甚至尝试修改node-gyp中的build.js文件,使其指向msbuild位置,但失败。

NODE.JS – 如何正确处理操作系统和URL风格的“path”混合?

在我的node.js应用程序中,我有可以传递的函数 OS风格的path,例如c:\ my \ docs \ mydoc.doc(或者/usr/docs/mydoc.doc或者其他什么都是本地的) 文件URL例如file:// c:/my/docs/mydoc.doc(我不确定'\'的有效性在??中) 无论哪种方式,我需要检查它们是否指向一个特定的位置,这个位置总是以本地OS样式的path存在,例如c:\ mydata \ directory \或/ usr / mydata /目录 显然,对于OS风格的path,我可以将它们作为string进行比较 – 它们应该总是相同的(它们是用path创build的),但FILE:// URL不一定使用path.sep,所以不会使用“string match “? 任何build议,以最好的方式来处理(我个人试图打破所有的一个或多个斜线,然后检查每一个?

Node.js抓取,转换图像src – >完整的URL

我使用Cheerio(https://github.com/MatthewMueller/cheerio)来抓取网站,并获取我正在进行的项目的图像。 我想知道是否有一个简单的方法与Node.js(或另一个包)将$(img).attr('src')转换为完全限定的URL? 有时我会得到“image.jpg”和其他时间“../../image.jpg”,其他时间“//somepath/image.jpg”。 也许我只是错过了某种types的正则expression式感谢您的时间:)

NodeJS – 将相对path转换为绝对path

在我的文件系统我的工作目录是在这里: C:\ TEMP \ A \ B \ C \ d 在b \ bb下有文件:tmp.txt C:\ TEMP \ A \ B \ BB \ tmp.txt 如果我想从我的工作目录转到这个文件,我将使用这个path: "../../bb/tmp.txt" 如果文件不存在,我想logging完整path并告诉用户: “文件C:\ temp \ a \ b \ bb \ tmp.txt不存在” 。 我的问题: 我需要一些函数 将相对path“../../bb/tmp.txt” 转换为绝对path:“C:\ temp \ a \ b \ bb \ tmp.txt” 在我的代码中应该是这样的: console.log("The file" + […]

Node.js:获取已安装的npm包的(绝对)根path

任务 我正在寻找一种通用的方式来获取Node.js中安装的npm包的(绝对)根path。 问题 我知道require.resolve ,但是这会给我入口点(主模块的path),而不是包的根path。 以bootstrap-sass为例。 说它在本地安装在项目文件夹C:\dev\my-project 。 那么我在找的是C:\dev\my-project\node_modules\bootstrap-sass 。 require.resolve('bootstrap-sass')将返回C:\dev\my-project\node_modules\bootstrap-sass\assets\javascripts\bootstrap.js 。 我可以想到如何获取包的根path的几种方法: 解决scheme#1 var packageRoot = path.resolve('node_modules/bootstrap-sass'); console.log(packageRoot); 这对在本地安装在node_modules文件夹中的软件包工作正常。 但是,如果我在一个子文件夹中,我需要parsing../node_modules/bootstrap-sass ,并且嵌套更多的文件夹会变得更复杂。 另外,这对全球安装的模块不起作用。 解决scheme#2 var packageRoot = require.resolve('bootstrap-sass') .match(/^.*[\/\\]node_modules[\/\\][^\/\\]*/)[0]; console.log(packageRoot); 这将适用于安装在node_modules文件夹中的本地和全局模块。 正则expression式将匹配最后一个node_modulespath元素和下面的path元素。 但是,如果一个包的入口点被设置为另一个包(例如package.json "main": "./node_modules/sub-package" ),则这将失败。 解决scheme#3 var escapeStringRegexp = require('escape-string-regexp'); /** * Get the root path of a npm package installed in node_modules. * […]

require.main.require工作,但不在摩卡testing

我写了一个全局函数来要求我的应用程序/框架的某些文件: global.coRequireModel = function(name) { // CRASH happens here return require.main.require('./api/_co' + name + '/_co' + name + '.model'); } 这个模块在/ components / coGlobalFunctions中。 这是我的主要应用程序app.js需要这样的: require('./components/coGlobalFunctions'); 然后在其他模块中使用框架中的“东西”,我使用: var baseScheme = coRequireModel('Base'); 这工作,但不是在摩卡testing,给我一个“错误:无法find模块”在require.main.require调用之前。 看来testing来自另一个源文件夹。 但是我认为require.main.require会把相对连接模块的方面拿掉。 编辑: 生活在api / user中的示例testing文件: var should = require('should'); var app = require('../../app'); var User = require('./user.model'); …

在没有全局安装的情况下可以在Node模块中包含一个命令行?

我有一个小的Node模块,在bin目录中包含一个命令行脚本。 "bin": { "generate": "./bin/generate.js" } generate.js脚本可以正确执行。 这一切工作正常,如果我运行npm install -g 。 但我不想全局安装,只有命令generate模块文件夹内的工作。 如果我从模块文件夹运行npm install ,它会正确安装node_modules子目录中的所有依赖node_modules 。 但是,然后从命令generate像给我“没有这样的文件或目录”。 谢谢。

在node.js中获取父目录名称

我正在使用node.js,我想要获取文件的父目录名称。 我有文件"../test1/folder1/FolderIWant/test.txt" 我想要"FolderIWant" 我努力了: var path = require('path'); var parentDir = path.dirname(filename); 但它返回../test1/folder1/FolderIWant

获取从哪个node.js执行的目录

我有一些项目,我运行它与node main.js / make test等。我需要的是从脚本获取此目录。 不仅来自main.js ,还来自任何子模块。 我尝试使用path插件和__directory ,但我得到当前文件的path(例如子模块)。 我也尝试require('path').dirname(require.main.filename) ,但是当我运行make test我得到摩卡dirname而不是我的项目目录。 什么是解决这个最简单的方法?

Windows下的Node.js中的非规范化path分隔符

在Windows中,Node.js的path模块生成所有带有反斜杠的path。 当其他函数(如resolve() )被调用时,它似乎会调用自己的normalize()函数。 有没有一种方法去正常化的path(正斜杠),没有明确的replace遍地? 我试过设置path.sep = '/' ,但是resolve()仍然会产生\\path。