Skip to content
This repository was archived by the owner on Dec 5, 2019. It is now read-only.

Commit aa7a9fc

Browse files
fix: catch worker-farm errors (#380)
1 parent bf36e21 commit aa7a9fc

12 files changed

+1215
-1248
lines changed

package-lock.json

+735-1,111
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/TaskRunner.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,14 @@ export default class TaskRunner {
4141
}
4242
: { maxConcurrentWorkers: this.maxConcurrentWorkers };
4343
this.workers = workerFarm(workerOptions, workerFile);
44-
this.boundWorkers = (options, cb) => this.workers(serialize(options), cb);
44+
this.boundWorkers = (options, cb) => {
45+
try {
46+
this.workers(serialize(options), cb);
47+
} catch (error) {
48+
// worker-farm can fail with ENOMEM or something else
49+
cb(error);
50+
}
51+
};
4552
} else {
4653
this.boundWorkers = (options, cb) => {
4754
try {

src/minify.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ const buildUglifyOptions = ({
2424
mangle == null
2525
? true
2626
: typeof mangle === 'boolean'
27-
? mangle
28-
: { ...mangle },
27+
? mangle
28+
: { ...mangle },
2929
output: {
3030
shebang: true,
3131
comments: false,

test/__snapshots__/cache-option.test.js.snap

+45-45
Large diffs are not rendered by default.

test/__snapshots__/exclude-option.test.js.snap

+12-12
Large diffs are not rendered by default.

test/__snapshots__/include-option.test.js.snap

+12-12
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`when applied with \`parallel\` option matches snapshot for errors into \`worker-farm\` and \`cache\` is \`true\`: errors 1`] = `
4+
Array [
5+
"Error: one.9cf5e356924aeff1105d.js from UglifyJs
6+
Error: worker-farm failed",
7+
]
8+
`;
9+
10+
exports[`when applied with \`parallel\` option matches snapshot for errors into \`worker-farm\` and \`cache\` is \`true\`: one.9cf5e356924aeff1105d.js 1`] = `
11+
"/******/ (function(modules) { // webpackBootstrap
12+
/******/ // The module cache
13+
/******/ var installedModules = {};
14+
/******/
15+
/******/ // The require function
16+
/******/ function __webpack_require__(moduleId) {
17+
/******/
18+
/******/ // Check if module is in cache
19+
/******/ if(installedModules[moduleId]) {
20+
/******/ return installedModules[moduleId].exports;
21+
/******/ }
22+
/******/ // Create a new module (and put it into the cache)
23+
/******/ var module = installedModules[moduleId] = {
24+
/******/ i: moduleId,
25+
/******/ l: false,
26+
/******/ exports: {}
27+
/******/ };
28+
/******/
29+
/******/ // Execute the module function
30+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31+
/******/
32+
/******/ // Flag the module as loaded
33+
/******/ module.l = true;
34+
/******/
35+
/******/ // Return the exports of the module
36+
/******/ return module.exports;
37+
/******/ }
38+
/******/
39+
/******/
40+
/******/ // expose the modules object (__webpack_modules__)
41+
/******/ __webpack_require__.m = modules;
42+
/******/
43+
/******/ // expose the module cache
44+
/******/ __webpack_require__.c = installedModules;
45+
/******/
46+
/******/ // define getter function for harmony exports
47+
/******/ __webpack_require__.d = function(exports, name, getter) {
48+
/******/ if(!__webpack_require__.o(exports, name)) {
49+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
50+
/******/ }
51+
/******/ };
52+
/******/
53+
/******/ // define __esModule on exports
54+
/******/ __webpack_require__.r = function(exports) {
55+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
56+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
57+
/******/ }
58+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
59+
/******/ };
60+
/******/
61+
/******/ // create a fake namespace object
62+
/******/ // mode & 1: value is a module id, require it
63+
/******/ // mode & 2: merge all properties of value into the ns
64+
/******/ // mode & 4: return value when already ns object
65+
/******/ // mode & 8|1: behave like require
66+
/******/ __webpack_require__.t = function(value, mode) {
67+
/******/ if(mode & 1) value = __webpack_require__(value);
68+
/******/ if(mode & 8) return value;
69+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
70+
/******/ var ns = Object.create(null);
71+
/******/ __webpack_require__.r(ns);
72+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
73+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
74+
/******/ return ns;
75+
/******/ };
76+
/******/
77+
/******/ // getDefaultExport function for compatibility with non-harmony modules
78+
/******/ __webpack_require__.n = function(module) {
79+
/******/ var getter = module && module.__esModule ?
80+
/******/ function getDefault() { return module['default']; } :
81+
/******/ function getModuleExports() { return module; };
82+
/******/ __webpack_require__.d(getter, 'a', getter);
83+
/******/ return getter;
84+
/******/ };
85+
/******/
86+
/******/ // Object.prototype.hasOwnProperty.call
87+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
88+
/******/
89+
/******/ // __webpack_public_path__
90+
/******/ __webpack_require__.p = \\"\\";
91+
/******/
92+
/******/
93+
/******/ // Load entry module and return exports
94+
/******/ return __webpack_require__(__webpack_require__.s = 0);
95+
/******/ })
96+
/************************************************************************/
97+
/******/ ([
98+
/* 0 */
99+
/***/ (function(module, exports) {
100+
101+
// foo
102+
/* @preserve*/
103+
// bar
104+
var a = 2 + 2;
105+
106+
module.exports = function Foo() {
107+
var b = 2 + 2;
108+
console.log(b + 1 + 2);
109+
};
110+
111+
112+
/***/ })
113+
/******/ ]);"
114+
`;
115+
116+
exports[`when applied with \`parallel\` option matches snapshot for errors into \`worker-farm\` and \`cache\` is \`true\`: warnings 1`] = `Array []`;
117+
118+
exports[`when applied with \`parallel\` option matches snapshot for errors into \`worker-farm\`: errors 1`] = `
119+
Array [
120+
"Error: one.9cf5e356924aeff1105d.js from UglifyJs
121+
Error: worker-farm failed",
122+
]
123+
`;
124+
125+
exports[`when applied with \`parallel\` option matches snapshot for errors into \`worker-farm\`: one.9cf5e356924aeff1105d.js 1`] = `
126+
"/******/ (function(modules) { // webpackBootstrap
127+
/******/ // The module cache
128+
/******/ var installedModules = {};
129+
/******/
130+
/******/ // The require function
131+
/******/ function __webpack_require__(moduleId) {
132+
/******/
133+
/******/ // Check if module is in cache
134+
/******/ if(installedModules[moduleId]) {
135+
/******/ return installedModules[moduleId].exports;
136+
/******/ }
137+
/******/ // Create a new module (and put it into the cache)
138+
/******/ var module = installedModules[moduleId] = {
139+
/******/ i: moduleId,
140+
/******/ l: false,
141+
/******/ exports: {}
142+
/******/ };
143+
/******/
144+
/******/ // Execute the module function
145+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
146+
/******/
147+
/******/ // Flag the module as loaded
148+
/******/ module.l = true;
149+
/******/
150+
/******/ // Return the exports of the module
151+
/******/ return module.exports;
152+
/******/ }
153+
/******/
154+
/******/
155+
/******/ // expose the modules object (__webpack_modules__)
156+
/******/ __webpack_require__.m = modules;
157+
/******/
158+
/******/ // expose the module cache
159+
/******/ __webpack_require__.c = installedModules;
160+
/******/
161+
/******/ // define getter function for harmony exports
162+
/******/ __webpack_require__.d = function(exports, name, getter) {
163+
/******/ if(!__webpack_require__.o(exports, name)) {
164+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
165+
/******/ }
166+
/******/ };
167+
/******/
168+
/******/ // define __esModule on exports
169+
/******/ __webpack_require__.r = function(exports) {
170+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
171+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
172+
/******/ }
173+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
174+
/******/ };
175+
/******/
176+
/******/ // create a fake namespace object
177+
/******/ // mode & 1: value is a module id, require it
178+
/******/ // mode & 2: merge all properties of value into the ns
179+
/******/ // mode & 4: return value when already ns object
180+
/******/ // mode & 8|1: behave like require
181+
/******/ __webpack_require__.t = function(value, mode) {
182+
/******/ if(mode & 1) value = __webpack_require__(value);
183+
/******/ if(mode & 8) return value;
184+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
185+
/******/ var ns = Object.create(null);
186+
/******/ __webpack_require__.r(ns);
187+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
188+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
189+
/******/ return ns;
190+
/******/ };
191+
/******/
192+
/******/ // getDefaultExport function for compatibility with non-harmony modules
193+
/******/ __webpack_require__.n = function(module) {
194+
/******/ var getter = module && module.__esModule ?
195+
/******/ function getDefault() { return module['default']; } :
196+
/******/ function getModuleExports() { return module; };
197+
/******/ __webpack_require__.d(getter, 'a', getter);
198+
/******/ return getter;
199+
/******/ };
200+
/******/
201+
/******/ // Object.prototype.hasOwnProperty.call
202+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
203+
/******/
204+
/******/ // __webpack_public_path__
205+
/******/ __webpack_require__.p = \\"\\";
206+
/******/
207+
/******/
208+
/******/ // Load entry module and return exports
209+
/******/ return __webpack_require__(__webpack_require__.s = 0);
210+
/******/ })
211+
/************************************************************************/
212+
/******/ ([
213+
/* 0 */
214+
/***/ (function(module, exports) {
215+
216+
// foo
217+
/* @preserve*/
218+
// bar
219+
var a = 2 + 2;
220+
221+
module.exports = function Foo() {
222+
var b = 2 + 2;
223+
console.log(b + 1 + 2);
224+
};
225+
226+
227+
/***/ })
228+
/******/ ]);"
229+
`;
230+
231+
exports[`when applied with \`parallel\` option matches snapshot for errors into \`worker-farm\`: warnings 1`] = `Array []`;

0 commit comments

Comments
 (0)