簡體   English   中英

為了讓我的代碼工作,我必須改變cheerio的一些核心功能,我如何將它持久化到我的模塊中?

[英]To make my code work I had to alter some core functionality of cheerio, how can I persist it in my module?

我正在創建一個用於學習目的的“網絡爬蟲”,我不得不更改一些cheerioJS核心功能以使我的代碼工作,這是發生的事情:

索引.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()”函數以滿足我的需要:

來自cheerio lib的static.js,看看里面的變化>>> <<<:

/**
 * $.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:

索引.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

然后你可以隨意修改,把它推送到你的 Github,然后在你自己的package.json

 "cheerio": "github.com/<YOURNAME>/cheerio";

當然,如果您認為您的編輯有助於改進整個模塊,那么您可以在原始模塊上提出問題/PR。

正如用戶@vtange 所說:

哦。 好吧,然后你可以 fork github.com/cheeriojs/cheerio,按照你的意願編輯它,將它推送到你自己的 github acct 然后通過“cheerio”將它鏈接到 package.json 中:“github.com/(YOURNAME)/cheerio” .

有效! NPM 安裝,從我的 git 安裝分叉版本!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM