Используйте Cheerio в Angular проекте - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть Angular веб-проект, в котором я пытаюсь использовать Cheerio. Я включил Cheerio в свой файл angular.json. Когда я включаю Cheerio в свой компонент приложения, я получаю следующее сообщение об ошибке:

index.js:43 Uncaught ReferenceError: global is not defined
    at Object../node_modules/buffer/index.js (index.js:43)
    at __webpack_require__ (bootstrap:79)
    at Object../node_modules/readable-stream/node_modules/safe-buffer/index.js (index.js:2)
    at __webpack_require__ (bootstrap:79)
    at Object../node_modules/readable-stream/lib/_stream_readable.js (_stream_readable.js:55)
    at __webpack_require__ (bootstrap:79)
    at Object../node_modules/readable-stream/readable-browser.js (readable-browser.js:1)
    at __webpack_require__ (bootstrap:79)
    at Object../node_modules/stream-browserify/index.js (index.js:28)
    at __webpack_require__ (bootstrap:79)

Я исправил эту ошибку, набрав ее в index.html, как предложил @Leandro Matilla:

if (global === undefined) {
    var global = window;
}

Но теперь я получаю другую ошибку:

util.js:103 Uncaught ReferenceError: Buffer is not defined
    at Object../node_modules/core-util-is/lib/util.js (util.js:103)
    at __webpack_require__ (bootstrap:79)
    at Object../node_modules/readable-stream/lib/_stream_readable.js (_stream_readable.js:67)
    at __webpack_require__ (bootstrap:79)
    at Object../node_modules/readable-stream/readable-browser.js (readable-browser.js:1)
    at __webpack_require__ (bootstrap:79)
    at Object../node_modules/stream-browserify/index.js (index.js:28)
    at __webpack_require__ (bootstrap:79)
    at Object../node_modules/cheerio/node_modules/parse5/lib/parser/parser_stream.js (parser_stream.js:3)
    at __webpack_require__ (bootstrap:79)

Как мне исправить это сообщение об ошибке? Я пробовал другие решения на StackOverflow, но ни одно из них не сработало ...

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Не нужно добавлять его к angular. json. Вот как вы должны это сделать. Примечание: как правильно указывает @phix, cheerio, похоже, не предназначен для внешнего использования. К этому моменту любые манипуляции, которые вы пытаетесь сделать с помощью cheerio, могут быть выполнены более четко с использованием только Angular.

Сначала установите его с помощью npm или пряжи.

npm install cheerio

Затем добавьте его в свой компонент:

import * as cheerio from 'cheerio';

Затем вы сможете использовать его, как в документации:

const $ = cheerio.load('<ul id="fruits">...</ul>');

Дополнительные примеры использования: https://www.npmjs.com/package/cheerio

Редактировать: Как уже упоминалось в комментариях, кажется, что cheerio опирается на серверные библиотеки. Вам нужно переключиться на Node Framework, чтобы использовать этот пакет. Руководство по настройке Cheerio и Node: https://buttercms.com/blog/web-scraping-with-nodejs-and-cheerio

0 голосов
/ 12 февраля 2020

Добавьте это к вашему index.html

<script>
    if (global === undefined) {
        var global = window;
    }
</script>
...