[api-minor] Tweak the Node.js fake worker loader to prevent Critical dependency: ...
warnings from Webpack
Since bundlers, such as Webpack, cannot be told to leave `require` statements alone we are thus forced to jump through hoops in order to prevent these warnings in third-party deployments of the PDF.js library; please see [Webpack issue 8826](https://github.com/webpack/webpack) and libraries such as [require-fool-webpack](https://github.com/sindresorhus/require-fool-webpack). *Please note:* This is based on the assumption that code running in Node.js won't ever be affected by e.g. Content Security Policies that prevent use of `eval`. If that ever occurs, we should revert to a normal `require` statement and simply document the Webpack warnings instead.
This commit is contained in:
parent
8519f87efb
commit
d370037618
@ -12,7 +12,6 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
/* globals __non_webpack_require__ */
|
|
||||||
/* eslint no-var: error */
|
/* eslint no-var: error */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1471,6 +1470,7 @@ const PDFWorker = (function PDFWorkerClosure() {
|
|||||||
let fakeWorkerCapability;
|
let fakeWorkerCapability;
|
||||||
|
|
||||||
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {
|
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
if (isNodeJS && typeof __non_webpack_require__ === 'function') {
|
if (isNodeJS && typeof __non_webpack_require__ === 'function') {
|
||||||
// Workers aren't supported in Node.js, force-disabling them there.
|
// Workers aren't supported in Node.js, force-disabling them there.
|
||||||
isWorkerDisabled = true;
|
isWorkerDisabled = true;
|
||||||
@ -1534,8 +1534,22 @@ const PDFWorker = (function PDFWorkerClosure() {
|
|||||||
return worker.WorkerMessageHandler;
|
return worker.WorkerMessageHandler;
|
||||||
}
|
}
|
||||||
if ((typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) &&
|
if ((typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) &&
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
(isNodeJS && typeof __non_webpack_require__ === 'function')) {
|
(isNodeJS && typeof __non_webpack_require__ === 'function')) {
|
||||||
const worker = __non_webpack_require__(getWorkerSrc());
|
// Since bundlers, such as Webpack, cannot be told to leave `require`
|
||||||
|
// statements alone we are thus forced to jump through hoops in order
|
||||||
|
// to prevent `Critical dependency: ...` warnings in third-party
|
||||||
|
// deployments of the built `pdf.js`/`pdf.worker.js` files; see
|
||||||
|
// https://github.com/webpack/webpack/issues/8826
|
||||||
|
//
|
||||||
|
// The following hack is based on the assumption that code running in
|
||||||
|
// Node.js won't ever be affected by e.g. Content Security Policies that
|
||||||
|
// prevent the use of `eval`. If that ever occurs, we should revert this
|
||||||
|
// to a normal `__non_webpack_require__` statement and simply document
|
||||||
|
// the Webpack warnings instead (telling users to ignore them).
|
||||||
|
//
|
||||||
|
// eslint-disable-next-line no-eval
|
||||||
|
const worker = eval('require')(getWorkerSrc());
|
||||||
return worker.WorkerMessageHandler;
|
return worker.WorkerMessageHandler;
|
||||||
}
|
}
|
||||||
await loadScript(getWorkerSrc());
|
await loadScript(getWorkerSrc());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user