Comments (9)
The issue is this this Uglify option.
Per uglify's docs:
pure_getters -- the default is false. If you pass true for this, UglifyJS will assume that object property access (e.g. foo.bar or foo["bar"]) doesn't have any side effects. Specify "strict" to treat foo.bar as side-effect-free only when foo is certain to not throw, i.e. not null or undefined.
That probably means that accessing some kind of property within the library has some kind of side-effect- mutating another variable, or doing something than 'purely' accessing a property.
I'll remove all Uglify compress
options from the next version of ReactQL, because obviously we can't control how third-party packages work. The net result is that some packages will be slightly more inflated than others, but generally not more than a few %.
In the meantime, deleting that line from your ReactQL kit should solve it.
from react-pdf-js.
@tsdexter - I've released the new version of ReactQL (and bumped the CLI) that removes the compress
options. It seems to be working well with react-pdf-js now.
I also bumped to Webpack v3, which had the nice side effect of shaving a few kb off the final vendor size, so you might find that even without the compress
options, it weighs in a little lighter 😄
from react-pdf-js.
Here is the component
import React from 'react';
// UI
import { Segment, Button } from 'semantic-ui-react'
import PDF from 'react-pdf-js';
class PDFViewer extends React.Component {
constructor(props) {
super(props);
this.state = {}
this.onDocumentComplete = this.onDocumentComplete.bind(this);
this.onPageComplete = this.onPageComplete.bind(this);
this.handlePrevious = this.handlePrevious.bind(this);
this.handleNext = this.handleNext.bind(this);
}
onDocumentComplete(pages) {
this.setState({ page: 1, pages });
}
onPageComplete(page) {
this.setState({ page });
}
handlePrevious() {
this.setState({ page: this.state.page - 1 });
}
handleNext() {
this.setState({ page: this.state.page + 1 });
}
renderPagination(page, pages) {
const previousButton = <Button disabled={page === 1} onClick={this.handlePrevious}>Previous Page</Button>
const nextButton = <Button disabled={page === pages} onClick={this.handleNext}>Next Page</Button>
return (
<Button.Group attached='top'>
{previousButton}
<Button basic as={Label}>{`Page ${page} / ${pages}`}</Button>
{nextButton}
</Button.Group>
);
}
render() {
const {url} = this.props
let pagination = null;
if (this.state.pages) {
pagination = this.renderPagination(this.state.page, this.state.pages);
}
return (
<div>
{pagination}
<Segment attached textAlign="center">
<PDF file={url} onDocumentComplete={this.onDocumentComplete} onPageComplete={this.onPageComplete} page={this.state.page} />
</Segment>
</div>
)
}
}
export default PDFViewer
from react-pdf-js.
I'm not familiar with this library, so I can't give any more specifics without playing around with it first. But generally, there are two issues that can prevent the production build (or indeed, any server render) from working properly:
-
Client-only libs. If this is not intended to work on Node, then library instantiation should go inside a 'safe' function that only executes on the client - such as
componentDidMount
. You can use a Webpackimport()
promise or just a standardrequire()
statement to pull the library in client-side. -
File paths changing. Because a server is build in
dist/server.js
, if you're passing in a path name that's relative to your original source tree, that may break down when you're trying to re-use that same path from within the new server. I haven't tested this, but you'd probably need an absolute path to be sure.
It may not have anything to do with either of the above, but those are common situations that can throw up differences between the two environments.
I'll play around with this when I have a little more time and let you know what I find.
from react-pdf-js.
Thx @leebenson appreciate the insight. I'll try to get an example up with a barebones ReactQL that reproduces the issue. If you look at it before me, you can likely rule out #2 as I'm using hosted absolute GraphCool URLs for the PDFs
from react-pdf-js.
@leebenson Here is a reproducible example: https://github.com/tsdexter/reactql-pdf-js
It will load the latest PDF from graph.cool and/or you can upload a new one. It works as expected in development mode.
In production, on load and you can see it gets the file as it knows the page count, it just doesn't render the PDF page and clicking through the pages causes more errors for each time it tries to render.
from react-pdf-js.
thx @leebenson I'll test it out tonight and confirm/close the issue if working.
from react-pdf-js.
Nice work @leebenson.
from react-pdf-js.
@leebenson thx. removing the compress option worked - smart to remove it from the kit as I just also had the same issue with later.js
from react-pdf-js.
Related Issues (20)
- Add possibility to load all document pages HOT 1
- Can we use it in class based components? HOT 1
- Render whole pdf file vertically and navigate between pages with scroll HOT 3
- Android browsers are not supported HOT 1
- Pdfjs-dist 'unexpected token' error with Jest HOT 5
- Can you re-build a new version to npm ? we need those last commit in , still can't us it HOT 10
- can not preview local file HOT 1
- Error when installing version 6.1.1 HOT 11
- There seems to be no page zooming function. HOT 1
- https://pdf.netlify.com HOT 1
- npm run start Error, when i use Umijs HOT 1
- Responsive Problem HOT 1
- When using Yarn installation, an error will be reported HOT 2
- Can we have download button HOT 2
- output of the PDF after rendering HOT 1
- SetScale is not working if we set the initial values to the scale HOT 1
- can we display multiple pages in once instead of put next previous page button HOT 2
- PDF Worker used CDN URL HOT 1
- When an error occurs in the url request provided, the page will report an error directly.
- Error rendering page with NextJS (14.0.3, 14.0.4 and 14.1.0) HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-pdf-js.