google / google/closure-compiler

NODE_PATH is not respected when resolving package.json for ES6 module.

Open
#3,148 11 comments 0 reactions 0 assignees View on GitHub
triage-done
Dominant language
JavaScript
Stars
7.7k
Forks
1.2k
Avg merge
2d 12h
Merged PRs (30d)
6

Description

I want to stub internal Node.js modules such as `stream` and I can do it if I place the mocks in the `node_modules` folder inside of my package that I compile, however I don't want to do that and I want to pass the specific location for the `package.json` mock.

```sh
java -jar /Users/zavr/adc/depack/node_modules/google-closure-compiler-java/compiler.jar
--compilation_level=ADVANCED
--language_in=ECMASCRIPT_2018
--language_out=ECMASCRIPT_2017
--module_resolution=NODE
--formatting=PRETTY_PRINT
--externs=externs/stream.js
--externs=externs/Buffer.js
--js=interns/node_modules/stream/package.json
--js=interns/node_modules/stream/index.js
--js=example/example2.js
--process_common_js_modules=true
```
This, unfortunately, does not work because `example/example2.js` does not have `interns/node_modules/stream/package.json` in the `NODE_PATH` when resolving. To solve this, I'm setting `spawnOptions` on the compiler with the `env` property set to include the `NODE_PATH`:
```js
spawnOptions = {
env: {
NODE_PATH: '/Users/zavr/adc/depack/interns',
},
}
```
However, this also results in an error:

```
example/example2.js:2: ERROR - Failed to load module "stream"
import { Readable } from 'stream'
```

When I try to create `node_modules` in the level above, I also get the error:

```sh
java --compilation_level=ADVANCED
--language_in=ECMASCRIPT_2018
--language_out=ECMASCRIPT_2017
--module_resolution=NODE
--formatting=PRETTY_PRINT
--externs=externs/stream.js
--externs=externs/Buffer.js
--js=../node_modules/stream/package.json
--js=../node_modules/stream/index.js
--js=example/example2.js
--process_common_js_modules=true
```
`cat ../node_modules/stream/package.json`:
```
{
"name": "stream",
"main": "index.js"
}
```
`cat ../node_modules/stream/index.js`:
```
module.exports = DEPACK$stream // eslint-disable-line
```
Is it possible to get the `stream` package resolved to something that is not inside of `node_modules` folder of the project directory from which I run Closure?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.