Open d2s opened 4 years ago
I was getting this error on MacOS. I think the culprit is puppeteer, as here: https://github.com/zachleat/speedlify/issues/17#issuecomment-653579379
Removing puppeteer and re-installing node modules seems to have fixed it for me.
In macOS, I am getting the same error after cloning the most recent speedlify
repo (renaming the local folder speedlify-hosts-test
) although a clone from two days ago worked fine. Maybe something broke in the interim? As the README suggests, I had replaced the /_data/_sites/*.js
files with a /_data/sites.js
of my own but had observed similar problems even when I left @zachleat's originals in place, too. This is what I get when I try npm run test-pages
(and, yes, I did do npm install
):
There are no known last run timestamps
(node:37780) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'length' of undefined
at [... directory path ...]/speedlify-hosts-test/run-tests.js:70:73
at processTicksAndRejections (internal/process/task_queues.js:97:5)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:37780) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:37780) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
I should also note that I've been unable to get the latest speedlify
to work on an install on either Netlify or render.com, running into roughly this same problem in each case.
@brycewray can you file a separate issue? What’s your vertical config file look like? Sounds like you’re missing a urls
array in the file.
@brycewray can you file a separate issue? What’s your vertical config file look like? Sounds like you’re missing a
urls
array in the file.
Will file separate issue. Thanks.
Update: @zachleat, went back to your original config and saw the problem. PEBKAC on my part. 🤷 🤦 Thank you as always, sir.
I have the same problem as @d2s. On a new Ubuntu 18.04 server, I run the following and get:
$ node -v
v14.8.0
$ git reflog HEAD
e9e4e58 (HEAD -> live, origin/live, origin/HEAD) HEAD@{0}: clone: from https://github.com/zachleat/speedlify.git
$ npm install
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated core-js@2.6.11: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.
> puppeteer@5.2.1 install /home/speedlify/speedlify/node_modules/puppeteer
> node install.js
Downloading Chromium r782078 - 126.4 Mb [====================] 100% 0.0s
Chromium (782078) downloaded to /home/speedlify/speedlify/node_modules/puppeteer/.local-chromium/linux-782078
> core-js@2.6.11 postinstall /home/speedlify/speedlify/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"
Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock
Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)
> ejs@2.7.4 postinstall /home/speedlify/speedlify/node_modules/ejs
> node ./postinstall.js
Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN axe-puppeteer@1.1.0 requires a peer of puppeteer@^1.10.0 || ^2.0.0 but none is installed. You must install peer dependencies yourself.
added 676 packages from 581 contributors and audited 682 packages in 29.101s
23 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
$ npm run test-pages
> speedlify@1.0.0 test-pages /home/speedlify/speedlify
> node run-tests
There are no known last run timestamps
First tests for clients.
Testing 1 site:
(node:1061) UnhandledPromiseRejectionWarning: Error: connect ECONNREFUSED 127.0.0.1:38417
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1144:16)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:1061) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:1061) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
I've tried it with different URLs to check if that's the problem. The sole file in _data/sites
is data/sites/clients.js
:
module.exports = {
name: "clients", // optional, falls back to object key
description: "Client sites",
options: {
frequency: 60 * 23, // 24 hours
// Use "run" if the sites don’t share assets on the same origin
// and we can reset chrome with each run instead of
// each site in every run (it’s faster)
// Use "site" if sites are all on the same origin and share assets.
freshChrome: "run"
},
urls: [
"https://www.google.com/",
]
};
wget
works to fetch the URLs, so there isn't a firewall issue.
I don't know how to debug this. I added --verbose
to npm run test-pages
but that didn't help
Solved for Ubuntu 18.04 by installing the following:
apt-get install -y libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb libgbm-dev
https://github.com/joelgriffith/navalia/issues/20#issuecomment-315187887 taught me about DEBUG=*
which sadly didn't have much effect when running npm run test-pages
.
After thinking about what software was used, I tried running lighthouse directly using
CHROME_PATH=/home/speedlify/speedlify/node_modules/puppeteer/.local-chromium/linux-782078/chrome-linux/chrome node ./node_modules/lighthouse/lighthouse-cli https://google.com --chrome-flags="--no-sandbox --headless --disable-gpu"
This output an error that a .so
was missing. I installed that, re-ran and another .so
was listed.
Rather than installing them one-by-one I went looking for a list of extra packages. After a bit of trial and error (there's lots of "You need this to get Puppeteer to run" posts, many outdated - one of which I'd tried installing straight after my first comment, and it didn't work) I found the list above at https://github.com/puppeteer/puppeteer/issues/3443#issuecomment-629662626.
Couldn't run tests locally on a Linux virtual machine.
Dependencies installed properly with
npm install
but for some reason Chromium doesn't seem to work properly.This bug report is related to the latest Git commit
cd322fe5f111ca59894b0c9f9497c57725fee087
of thespeedlify
repository.