-
Couldn't load subscription status.
- Fork 471
Respect NODE_PATH when resolving modules #3701
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
Changes from all commits
a6a00fe
d25b99d
ad3ecbf
a058ff5
2bcdd1e
49f27e6
03e0bdc
d92c2ed
360eb73
94ffa31
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -32,33 +32,49 @@ type t = Bsb_pkg_types.t | |
| when resolving [ppx-flags] | ||
| *) | ||
| let make_sub_path (x : t) : string = | ||
| Literals.node_modules // Bsb_pkg_types.to_string x | ||
|
|
||
| Literals.node_modules // Bsb_pkg_types.to_string x | ||
|
|
||
| let node_path_delimiter = | ||
| if Sys.win32 then | ||
| ';' | ||
| else | ||
| ':' | ||
|
|
||
| (** It makes sense to have this function raise, when [bsb] could not resolve a package, it used to mean | ||
| a failure | ||
| *) | ||
| let resolve_bs_package_aux ~cwd (pkg : t) = | ||
| (* First try to resolve recursively from the current working directory *) | ||
| let sub_path = make_sub_path pkg in | ||
| let rec aux cwd = | ||
| let abs_marker = cwd // sub_path in | ||
| if Sys.file_exists abs_marker then abs_marker | ||
| let abs_marker = cwd // sub_path in | ||
| if Sys.file_exists abs_marker then Some(abs_marker) | ||
| else | ||
| let another_cwd = Filename.dirname cwd in (* TODO: may non-terminating when see symlinks *) | ||
| if String.length another_cwd < String.length cwd then | ||
| aux another_cwd | ||
| else (* To the end try other possiblilities *) | ||
| begin match Sys.getenv "npm_config_prefix" | ||
| // "lib" // sub_path with | ||
| | abs_marker when Sys.file_exists abs_marker -> | ||
| abs_marker | ||
| | _ -> | ||
| Bsb_exception.package_not_found ~pkg ~json:None | ||
| | exception Not_found -> | ||
| Bsb_exception.package_not_found ~pkg ~json:None | ||
| end | ||
| aux another_cwd | ||
| else | ||
| None | ||
| in | ||
| aux cwd | ||
| match aux cwd with | ||
| | Some(package_dir) -> package_dir | ||
| (* If the package can not be resolved then check if NODE_PATH is set and if set then search there*) | ||
| | None -> | ||
| let node_path = | ||
| match Sys.getenv "NODE_PATH" with | ||
| | node_path -> | ||
| Ext_string.split node_path node_path_delimiter | ||
| | exception Not_found -> | ||
| Bsb_exception.package_not_found ~pkg ~json:None | ||
| in | ||
| let check_dir dir = | ||
| match Sys.file_exists dir with | ||
| | true -> Some(dir) | ||
| | false -> None | ||
| in | ||
| match Ext_list.find_opt node_path (fun dir -> check_dir (dir // Bsb_pkg_types.to_string pkg)) with | ||
| | Some(resolved_dir) -> resolved_dir | ||
| | None -> Bsb_exception.package_not_found ~pkg ~json:None | ||
|
|
||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. checkout Ext_list.find_opt |
||
| module Coll = Hashtbl_make.Make(struct | ||
| type nonrec t = t | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| *.exe | ||
| *.obj | ||
| *.out | ||
| *.compile | ||
| *.native | ||
| *.byte | ||
| *.cmo | ||
| *.annot | ||
| *.cmi | ||
| *.cmx | ||
| *.cmt | ||
| *.cmti | ||
| *.cma | ||
| *.a | ||
| *.cmxa | ||
| *.obj | ||
| *~ | ||
| *.annot | ||
| *.cmj | ||
| *.bak | ||
| lib/bs | ||
| *.mlast | ||
| *.mliast | ||
| .vscode | ||
| .merlin | ||
| **/*.js | ||
| !node_modules | ||
| !input.js | ||
| !testcase.js |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
|
|
||
|
|
||
| # Build | ||
| ``` | ||
| npm run build | ||
| ``` | ||
|
|
||
| # Watch | ||
|
|
||
| ``` | ||
| npm run watch | ||
| ``` | ||
|
|
||
|
|
||
| # Editor | ||
| If you use `vscode`, Press `Windows + Shift + B` it will build automatically |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| { | ||
| "name": "bs_dependencies_node_path_override", | ||
| "version": "0.1.0", | ||
| "sources": [ | ||
| { | ||
| "dir": "src", | ||
| "subdirs" : true | ||
| }, | ||
| { | ||
| "dir": "examples", | ||
| "type" : "dev", | ||
| "subdirs" : true | ||
| } | ||
| ], | ||
| "package-specs" : { | ||
| "module": "commonjs", | ||
| "in-source": true | ||
| }, | ||
| "namespace": true, | ||
| "bs-dependencies" : [ | ||
| "liba" | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| let v = Demo.name |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| //@ts-check | ||
| var path = require('path') | ||
| var p = require('child_process') | ||
| var node_path = path.join(__dirname, "nothing_exists_here") + ":" + path.join(__dirname, "overridden_node_modules") | ||
| p.execSync(`NODE_PATH=${node_path} node ./testcase.js`, { cwd: __dirname, shell: true, encoding: 'utf8' }) |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| { | ||
| "name": "bs_dependencies_node_path_override", | ||
| "version": "0.1.0", | ||
| "scripts": { | ||
| "clean": "bsb -clean-world", | ||
| "build": "bsb -make-world", | ||
| "watch": "bsb -make-world -w" | ||
| }, | ||
| "keywords": [ | ||
| "BuckleScript" | ||
| ], | ||
| "license": "MIT", | ||
| "devDependencies": { | ||
| "bs-platform": "^5.1.0-dev.3" | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
|
|
||
|
|
||
| let name = __FILE__ ^ Liba.Demo.name |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| //@ts-check | ||
| var assert = require('assert') | ||
| var path = require('path') | ||
| var p = require('child_process') | ||
| p.execSync(`bsb -make-world`, { cwd: __dirname, shell: true, encoding: 'utf8' }) | ||
| var u = require("./examples/test.js") | ||
| assert.equal(path.basename(u.v), 'demo.mldemo.ml') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is
Sys.win32