rss-parser icon indicating copy to clipboard operation
rss-parser copied to clipboard

create-react-app can't minify parser.js

Open tomclark opened this issue 6 years ago • 22 comments

Hi there,

Having a problem with the library building from create-react-app from v3.0.0 onwards. 2.12.1 is fine. On running npm run build, I get:

> react-scripts build

Creating an optimized production build...
Failed to compile.

Failed to minify the code from this file:

 	./node_modules/rss-parser/lib/parser.js:16

Read more here: http://bit.ly/2tRViJ9

Looks like an ES5/ES6 issue?

tomclark avatar Jan 31 '18 14:01 tomclark

Thanks for the report. We did switch to ES6 in 3.0.0

From the bit.ly link, it says "ask that the package be published pre-compiled". We have a pre-compiled version in dist/rss-parser.min.js. Are you able to import that file?

rbren avatar Jan 31 '18 16:01 rbren

Was in a bit of a hurry, so I just downgraded to 2.12.1 which works absolutely fine and got me moving.

Will have a go at importing the file directly when I get a chance at the weekend and report back.

Thanks for the quick reply! 👍

tomclark avatar Jan 31 '18 17:01 tomclark

I've got a noob question. Im not quite sure exactly how to properly import the min version.

nikomc0 avatar Feb 03 '18 16:02 nikomc0

What client technology are you using?

At the root of the project, run:

npm install --save rss-parser

It's then in node_modules/rss-parser/dist/rss-parser.min.js.

How and where you include that in your pages then depends what client framework you're using (i.e.React, Angular etc).

tomclark avatar Feb 03 '18 23:02 tomclark

Im using react and getting "Parser is not a constructor" error.

screen shot 2018-02-03 at 6 13 40 pm

nikomc0 avatar Feb 04 '18 02:02 nikomc0

It should be new RSSParser()

rbren avatar Feb 04 '18 17:02 rbren

@nikomc0 encounter the same issue while using create-react-app.

What I did to solve around is to import the pre-compiled version directly and use the RSSParser instead of Parse and I also have to declare eslint global namespace to avoid the create-react-app build errors.

/* global RSSParser */
import 'rss-parser/dist/rss-parser.min.js';

let parser = new RSSParser();

also, I tried to add module property to the package.json which pass the build but since two version has different parser naming, it wasn't working properly.

n7best avatar Feb 14 '18 00:02 n7best

Thanks @n7best. Any tips on how we can change rss-parser to better support create-react-app?

rbren avatar Feb 14 '18 15:02 rbren

Had the same issue for a Travis CI integration of an app created with create-react-app. The Travis log says

> react-scripts build
Creating an optimized production build...
Failed to compile.
Failed to minify the code from this file: 
 	./node_modules/rss-parser/lib/parser.js:16 

The create-react-app README argues the package should be published pre-compiled to ES5 (not ES6).

JochenFromm avatar Mar 09 '18 23:03 JochenFromm

I tried switching to babel-preset-env, but it gives the same result as babel-preset-2015

The code generated by babel (everything in ./dist/) is all ES5, per the README. So I'm not sure what the problem might be.

rbren avatar Mar 12 '18 20:03 rbren

Any news about a solution for this? Just noticed the same problem and came searching some answers.

Locheed avatar Mar 19 '18 00:03 Locheed

Yea CRA doesn't seem to transpile external dependencies to ES5. It has to be precompiled. https://github.com/facebook/create-react-app/issues/1125

workaround from @n7best works fine now.

Locheed avatar Mar 19 '18 10:03 Locheed

Jumping in on this thread after noticing the same issue, will use the workaround for now.

Ueland avatar Apr 05 '18 12:04 Ueland

I will also use the workaround for now

gazpachu avatar Apr 30 '18 13:04 gazpachu

Can someone explain further how to implement @n7best 's workaround? I've tried the below with no success.

captura de pantalla de 2018-06-03 00-45-48

cgpomeroy avatar Jun 03 '18 07:06 cgpomeroy

@cgpomeroy

I was able to implement in my create-react-app.

I'm using Axios to fetch the page data.

const RSSParser = require('rss-parser');

getWiredFeed(){
    axios.get('https://www.wired.com/feed')
    .then((res) => {
      let parser = new RSSParser();
      parser.parseString(res.data, (err, feed)=> {
        this.setState({
          wiredItems: feed.items
        });
      });
    })
    .catch((err) => {
      console.log(err);
    })
  }

415DomSmith avatar Jul 08 '18 17:07 415DomSmith

Using the suggestion from @415DomSmith I got the example to work without the need for axios

const RSSParser = require('rss-parser');
const CORS_PROXY = "https://cors-anywhere.herokuapp.com/"

let parser = new RSSParser();
parser.parseURL(CORS_PROXY + 'https://www.reddit.com/.rss', function(err, feed) {
  console.log(feed.title);
  feed.items.forEach(function(entry) {
    console.log(entry.title + ':' + entry.link);
  })
})

udeshx avatar Jul 23 '18 07:07 udeshx

@cgpomeroy Hi, have you found the way to solve it? Workaround from @n7best doesn't work for me.

ranpox avatar Sep 08 '18 10:09 ranpox

Hi @bobby-brennan, thanks for your great RSS Parser. Everything works fine in development, but I get the same "Failed to minify the code from this file: ./node_modules/rss-parser/lib/parser.js:16" error message when building my project.

The workaround (importying the minified version) is not working as I get this error message : RSSParser() is not a constructor.

By any chance, did you manage to identify what the issue is, or at least do you recommend a specific workaround to solve this issue? Thanks!

antoinedelp avatar Oct 17 '18 14:10 antoinedelp

I would try using the file in dist/rss-parser.min.js. If you're using version 2.x, you should also use the README from that version, as the API has changed. In particular, RSSParser is not a constructor in 2.x - instead, you use RSSParser.parseUrl(...)

rbren avatar Oct 20 '18 18:10 rbren

@nikomc0 encounter the same issue while using create-react-app.

What I did to solve around is to import the pre-compiled version directly and use the RSSParser instead of Parse and I also have to declare eslint global namespace to avoid the create-react-app build errors.

/* global RSSParser */
import 'rss-parser/dist/rss-parser.min.js';

let parser = new RSSParser();

also, I tried to add module property to the package.json which pass the build but since two version has different parser naming, it wasn't working properly.

If i am using Your method i am getting a compile time error of

TS2304: Cannot find name 'RSSParser'

please help me to resolve this

anshulsinha1101 avatar Jan 09 '19 21:01 anshulsinha1101

@415DomSmith solution worked for me! The only difference is that I had to use the cors proxy.

JohnnyHandy avatar Sep 12 '19 19:09 JohnnyHandy