Sketch-sh/sketch-sh

Resolve main entry module from package.json instead of using jsdelivr data

thangngoc89 opened this issue · 9 comments

Relevant issue: jsdelivr/jsdelivr#18166


Update

So apparently jsdelivr will minify the main entry file and add .min. in its name. Since we check for the name. And the minified file could saves a lot of bytes and improve parsing speed for the bundler.

So we would save this default file provided by jsdelivr, check with what's provided in main field to see if the different is .min.. If yes then download the minified file.


Description

The bundler needs to know the main entry of a package when working with bare module require statement like require("react"). Currently, I'm relying on jsdelivr's API to query for that information but it could be inaccurate. Since we are going to download package.json anyway, we should resolve this information ourselves.

How

Getting default_file from jsdelivr api is done here

|> optionalField("default", string)

It should be simplify and only returns the files array.

Now add a new decoder for main field here

|> optionalField("dependencies", D.dict(D.string))
|> optionalField("browser", decode_browser)

And use that as value of default_file

idkjs commented

I'm trying to run the project on master and getting the following webpack error:

 client [master*]yarn start
yarn run v1.17.3
warning ../../../../package.json: No license field
$ webpack-dev-server
/Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/webpack-cli/bin/config-yargs.js:89
				describe: optionsSchema.definitions.output.properties.path.description,
				                                           ^

TypeError: Cannot read property 'properties' of undefined
    at module.exports (/Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/webpack-cli/bin/config-yargs.js:89:48)
    at Object.<anonymous> (/Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/webpack-dev-server/bin/webpack-dev-server.js:65:25)
    at Module._compile (internal/modules/cjs/loader.js:759:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)
    at Function.Module.runMain (internal/modules/cjs/loader.js:826:10)
    at internal/main/run_main_module.js:17:11
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
➜  client [master*]

In the forum you noted we should run this with yarn. I noticed in https://github.com/Sketch-sh/sketch-sh/blob/master/DEVELOPING.md you use npm. Not sure if this matters.

Is this expected? How should i get the build to run? Thank you.

idkjs commented

Also, whenever you run yarn install you always get an error on let-anything package.

SKETCHDEV sketch-sh
➜  sketch-sh [master]ls
CHANGELOG.md  Dockerfile    Makefile      branding      docker        github        now.json.old
DEVELOPING.md LICENSE       README.md     client        docs          now.json      server
➜  sketch-sh [master]client
➜  client [master]yarn
yarn install v1.17.3
warning ../../../../package.json: No license field
info No lockfile found.
warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.
[1/4] 🔍  Resolving packages...
warning reason-loadable > react-dom@16.2.0: This version of react-dom/server contains a minor vulnerability. Please update react-dom to 16.2.1 or 16.4.2+. Learn more: https://fb.me/cve-2018-6341
warning reason-loadable > react > fbjs > core-js@1.2.7: core-js@<2.6.8 is no longer maintained. Please, upgrade to core-js@3 or at least to actual version of core-js@2.
warning @glennsl/bs-jest > jest > jest-cli > jest-config > jest-environment-jsdom > jsdom > left-pad@1.3.0: use String.prototype.padStart()
warning bundle-buddy > openport@0.0.4: Use portfinder
warning cypress-image-snapshot > term-img > iterm2-version > app-path > execa > cross-spawn-async@2.2.5: cross-spawn no longer requires a build toolchain, use it instead
warning postcss-preset-env > postcss-color-mod-function > postcss-values-parser > flatten@1.0.2: I wrote this module a very long time ago; you should use something else.
warning webpack-bundle-analyzer > bfj-node4@5.3.1: Switch to the `bfj` package for fixes and new features!
warning webpack-cli > jscodeshift > babel-preset-es2015@6.24.1: 🙌  Thanks for using Babel: we recommend using babel-preset-env now: please read https://babeljs.io/env to update!
warning webpack-cli > webpack-addons > jscodeshift > babel-preset-es2015@6.24.1: 🙌  Thanks for using Babel: we recommend using babel-preset-env now: please read https://babeljs.io/env to update!
warning webpack-cli > jscodeshift > nomnom@1.8.1: Package no longer supported. Contact support@npmjs.com for more info.
warning webpack-cli > webpack-addons > jscodeshift > nomnom@1.8.1: Package no longer supported. Contact support@npmjs.com for more info.
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
warning "@reach/dialog > @reach/component-component@0.1.3" has unmet peer dependency "prop-types@^15.6.2".
warning " > reason-apollo@0.14.2" has unmet peer dependency "apollo-upload-client@^9.0.0".
warning " > reason-apollo@0.14.2" has unmet peer dependency "apollo-utilities@^1.0.16".
warning " > babel-jest@23.6.0" has unmet peer dependency "babel-core@^6.0.0 || ^7.0.0-0".
warning "cypress-image-snapshot > jest-image-snapshot@2.7.0" has unmet peer dependency "jest@>=20 <=23".
[4/4] 🔨  Building fresh packages...
[-/8] ⠂ waiting...
[-/8] ⠂ waiting...
[8/8] ⠄ let-anything
[-/8] ⠄ waiting...
error /Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/let-anything: Command failed.
Exit code: 2
Command: bsb -make-world -backend native
Arguments:
Directory: /Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/let-anything
Output:
[1/6] Building src/Let_anything.mlast
sh: /Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/let-anything/node_modules/bsb-native/lib/bs_ppx_tools.exe: No such file or directory

  We've found a bug for you!
  /Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/let-anything/src/Let_anything.re

  There's been an error running a preprocessor before the compilation of a file.
  This was the command:

  /Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/let-anything/node_modules/bsb-native/lib/bs_ppx_tools.exe '/var/folders/dz/xzttny_14gs2lgxcvl5lm5680000gn/T/camlpp



➜  client [master]
idkjs commented

Tried fresh clone. cd client && yarn.
Add let-anything with yarn add let-anything -D due to error on install.

Run an initial bsb build, yarn bs:build.

Start dev server: yarn start.

Same error as above:

➜  client [master*]yarn start
yarn run v1.17.3
warning ../../../../package.json: No license field
$ webpack-dev-server
/Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/webpack-cli/bin/config-yargs.js:89
				describe: optionsSchema.definitions.output.properties.path.description,
				                                           ^

TypeError: Cannot read property 'properties' of undefined
    at module.exports (/Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/webpack-cli/bin/config-yargs.js:89:48)
    at Object.<anonymous> (/Users/prisc_000/working/SKETCHDEV/sketch-sh/client/node_modules/webpack-dev-server/bin/webpack-dev-server.js:65:25)
    at Module._compile (internal/modules/cjs/loader.js:759:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)
    at Function.Module.runMain (internal/modules/cjs/loader.js:826:10)
    at internal/main/run_main_module.js:17:11
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
➜  client [master*]

Will wait on your feedback. Thank you.

@idkjs I'm using yarn, the contributing guide is a little bit outdated. But be sure you check out engine_bs branch ?

idkjs commented

Ah, ok. I had it running on that before but didn't realize that is what we were working off of. Thank you.

@idkjs sorry about that. As bucklescript is on development, I didn't get a chance to document it properly

idkjs commented

@thangngoc89 i would be happy for you to take a few minutes and walk me through the workflow to get me up and running. Is that possible?

My first question would be, how do i know the Fetch call to JsDeliver is happening? I cant seem to get a Js.log() to run out of the module?

sure. I'll ping you on discord when I'm around

BuckleScript does not exist anymore and I don't think we will have the resources to build a brand new Sketch engine for ReScript anytime soon, so closing related issues.