为了使我的代码正常工作,我必须更改 cheerio 的一些核心功能,我如何才能将它保留在我的模块中?
To make my code work I had to alter some core functionality of cheerio, how can I persist it in my module?
我创建了一个 "web crawler" 用于学习目的,我不得不更改一些 cheerioJS 核心功能以使我的代码工作,这是发生的事情:
index.js:
var request = require('request');
var cheerio = require('cheerio');
module.exports.findWordInURL = function(url, word) {
request(url, function(error, response, body) {
if (!error && response.statusCode == 200) {
$ = cheerio.load(body);
texto = [];
retorno = [];
b = $('body').text().toLowerCase();
c = b.replace(/\s+/g, ' ');
texto = c.split("¬");
for (var i = texto.length - 1; i >= 0; i--) {
if (texto[i].search(word) !== -1) {
retorno.push("+" + texto[i] + "+");
}
}
console.log(retorno);
} else {
console.log(error);
}
});
};
之所以有效,是因为我更改了“$().text()”函数以满足我的需要:
static.js来自cheerio lib,看里面的变化>>> <<<:
/**
* $.text(dom)
*/
exports.text = function(elems) {
if (!elems) return '';
var ret = '',
len = elems.length,
elem;
for (var i = 0; i < len; i++) {
elem = elems[i];
if (elem.type === 'text') ret += elem.data >>>+ "¬"<<<;
else if (elem.children && elem.type !== 'comment') {
ret += exports.text(elem.children);
}
}
return ret;
};
然后,当我在另一个 .js 文件中调用它时,它按预期工作:
teste.js:
var webCrawler = require('./index');
webCrawler.findWordInURL("http://www.estadao.com.br/","temer");
节点teste.js:
如何让我的模块使用这个修改后的 cheerio 进入 NPM,或者至少如果有人在 git 上克隆它,当他通过 npm install 安装时收到这个修改后的 cheerio?
方法一
您可以通过将修改后的 cheerio.text 函数(不确定它是否是 cheerio.text,检查)放在您自己的 index.js 本身中来避免完全修改原始的 cheerio:
index.js
var request = require('request');
var cheerio = require('cheerio');
cheerio.text = function(elems) {
if (!elems) return '';
var ret = '',
len = elems.length,
elem;
for (var i = 0; i < len; i++) {
elem = elems[i];
if (elem.type === 'text') ret += elem.data >>>+ "¬"<<<;
else if (elem.children && elem.type !== 'comment') {
ret += exports.text(elem.children);
}
}
return ret;
};
这样至少我们都 npm install
相同的 Cheerio 并且如果我们使用您的应用程序就可以获得您修改后的功能
方法二
如果您似乎无法执行方法 1,您可以随时将正在使用的模块分叉到 Github,在本例中为 https://github.com/cheeriojs/cheerio
然后你随便修改,push到你的Github,然后在你自己的package.json
:
"cheerio": "github.com/<YOURNAME>/cheerio";
当然,如果您认为您的编辑有助于改进整体模块,那么您可以在原始模块上制作一个issue/PR。
正如用户@vtange 所说:
Oh. Well, you could then fork github.com/cheeriojs/cheerio, edit it as
you wish, push it to your own github acct then link it in
package.json via "cheerio": "github.com/(YOURNAME)/cheerio".
成功了! NPM 安装,从我的 git!
安装了分叉版本
我创建了一个 "web crawler" 用于学习目的,我不得不更改一些 cheerioJS 核心功能以使我的代码工作,这是发生的事情:
index.js:
var request = require('request');
var cheerio = require('cheerio');
module.exports.findWordInURL = function(url, word) {
request(url, function(error, response, body) {
if (!error && response.statusCode == 200) {
$ = cheerio.load(body);
texto = [];
retorno = [];
b = $('body').text().toLowerCase();
c = b.replace(/\s+/g, ' ');
texto = c.split("¬");
for (var i = texto.length - 1; i >= 0; i--) {
if (texto[i].search(word) !== -1) {
retorno.push("+" + texto[i] + "+");
}
}
console.log(retorno);
} else {
console.log(error);
}
});
};
之所以有效,是因为我更改了“$().text()”函数以满足我的需要:
static.js来自cheerio lib,看里面的变化>>> <<<:
/**
* $.text(dom)
*/
exports.text = function(elems) {
if (!elems) return '';
var ret = '',
len = elems.length,
elem;
for (var i = 0; i < len; i++) {
elem = elems[i];
if (elem.type === 'text') ret += elem.data >>>+ "¬"<<<;
else if (elem.children && elem.type !== 'comment') {
ret += exports.text(elem.children);
}
}
return ret;
};
然后,当我在另一个 .js 文件中调用它时,它按预期工作:
teste.js:
var webCrawler = require('./index');
webCrawler.findWordInURL("http://www.estadao.com.br/","temer");
节点teste.js:
如何让我的模块使用这个修改后的 cheerio 进入 NPM,或者至少如果有人在 git 上克隆它,当他通过 npm install 安装时收到这个修改后的 cheerio?
方法一
您可以通过将修改后的 cheerio.text 函数(不确定它是否是 cheerio.text,检查)放在您自己的 index.js 本身中来避免完全修改原始的 cheerio:
index.js
var request = require('request');
var cheerio = require('cheerio');
cheerio.text = function(elems) {
if (!elems) return '';
var ret = '',
len = elems.length,
elem;
for (var i = 0; i < len; i++) {
elem = elems[i];
if (elem.type === 'text') ret += elem.data >>>+ "¬"<<<;
else if (elem.children && elem.type !== 'comment') {
ret += exports.text(elem.children);
}
}
return ret;
};
这样至少我们都 npm install
相同的 Cheerio 并且如果我们使用您的应用程序就可以获得您修改后的功能
方法二
如果您似乎无法执行方法 1,您可以随时将正在使用的模块分叉到 Github,在本例中为 https://github.com/cheeriojs/cheerio
然后你随便修改,push到你的Github,然后在你自己的package.json
:
"cheerio": "github.com/<YOURNAME>/cheerio";
当然,如果您认为您的编辑有助于改进整体模块,那么您可以在原始模块上制作一个issue/PR。
正如用户@vtange 所说:
Oh. Well, you could then fork github.com/cheeriojs/cheerio, edit it as you wish, push it to your own github acct then link it in package.json via "cheerio": "github.com/(YOURNAME)/cheerio".
成功了! NPM 安装,从我的 git!
安装了分叉版本