Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Fix installing from GitHub URL #5669

Merged
merged 2 commits into from Apr 17, 2020
Merged

Conversation

jackfranklin
Copy link
Collaborator

The change to the install script to require TypeScript works fine when
installing from npm (because on npm the lib directory with the
compiled code already exists) but doesn't if you install from a GitHub
URL. By default it seems npm uses the files list when you install from
GitHub which means it's missing a bunch of files that we need to
compile.

Additionally by default when installing from a GitHub URL npm doesn't
install the dependencies which is an issue for us when we need to
compile TypeScript.

The fix is to create a prepare script that runs TypeScript if
required. From the npm docs 1:

prepare: Run both BEFORE the package is packed and published, on
local npm install without any arguments, and when installing git
dependencies

And from the npm docs on install 2, it confirms that if a package has
a prepare script it is run when installing from GitHub:

As with regular git dependencies, dependencies and devDependencies
will be installed if the package has a prepare script, before the
package is done installing.

Despite having the prepare script we still need the TypeScript check
in install.js to satisfy the 3rd scenario below where we need to force
a compile:

  • If I'm a user installing puppeteer@X from npm, the module is
    published with the lib/ directory of compiled code, so I'm set.
  • If I'm a user installing Puppeteer from GitHub, the prepare script
    will run TypeScript for me so I'm set.
  • If I'm a developer working on Puppeteer, the prepare script also
    runs but after npm install which means install.js fails as it
    requires ./lib/helper.js. So in install.js we call
    compileTypeScriptIfRequired to catch this case.

Fixes #5660.

The change to the install script to require TypeScript works fine when
installing from npm (because on npm the `lib` directory with the
compiled code already exists) but doesn't if you install from a GitHub
URL. By default it seems npm uses the `files` list when you install from
GitHub which means it's missing a bunch of files that we need to
compile.

Additionally by default when installing from a GitHub URL npm doesn't
install the dependencies which is an issue for us when we need to
compile TypeScript.

The fix is to create a `prepare` script that runs TypeScript if
required. From the npm docs [1]:

> `prepare`: Run both BEFORE the package is packed and published, on
> local npm install without any arguments, and when installing git
> dependencies

And from the npm docs on install [2], it confirms that if a package has
a `prepare` script it is run when installing from GitHub:

> As with regular git dependencies, dependencies and devDependencies
> will be installed if the package has a prepare script, before the
> package is done installing.

Despite having the `prepare` script we still need the TypeScript check
in `install.js` to satisfy the 3rd scenario below where we need to force
a compile:

* If I'm a user installing `puppeteer@X` from npm, the module is
published with the `lib/` directory of compiled code, so I'm set.
* If I'm a user installing Puppeteer from GitHub, the `prepare` script
will run TypeScript for me so I'm set.
* If I'm a developer working on Puppeteer, the `prepare` script also
runs but _after_ `npm install` which means `install.js` fails as it
requires `./lib/helper.js`. So in `install.js` we call
`compileTypeScriptIfRequired` to catch this case.

Fixes #5660.

[1]: https://docs.npmjs.com/misc/scripts
[2]: https://docs.npmjs.com/cli/install
@jackfranklin
Copy link
Collaborator Author

Installing from this branch works for me:

npm i --save-dev https://github.com/GoogleChrome/puppeteer#fix-install-from-gh

> puppeteer@3.0.0-post install /Users/jacktfranklin/src/temp/test-pup/node_modules/puppeteer
> node install.js

Downloading Chromium r737027 - 118.4 Mb [====================] 100% 0.0s
Chromium (737027) downloaded to /Users/jacktfranklin/src/temp/test-pup/node_modules/puppeteer/.local-chromium/mac-737027
npm WARN test-pup@1.0.0 No description
npm WARN test-pup@1.0.0 No repository field.

+ puppeteer@3.0.0-post
added 49 packages from 77 contributors and audited 80 packages in 58.06s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Cannot install v3.0.0-post from GitHub URL
3 participants