# Is it possible to add a dependency to a node.js version?

**URL:** <https://discourse.nodered.org/t/is-it-possible-to-add-a-dependency-to-a-node-js-version/20190>\
**Category:** Developing Nodes\
**Created:** [11 January 2020 09:15 UTC](https://discourse.nodered.org/t/is-it-possible-to-add-a-dependency-to-a-node-js-version/20190 "2020-01-11T09:15:35Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Achronite](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/achronite/32/31868_2.png) [@Achronite](https://discourse.nodered.org/u/Achronite)\
**Post date:** [11 January 2020 09:15 UTC](https://discourse.nodered.org/t/is-it-possible-to-add-a-dependency-to-a-node-js-version/20190/1 "2020-01-11T09:15:35Z")

</div>

My upgraded node-red module requires node v10+ to be able to execute N-API threadsafe functions.

Is there a way that this can be specified in the `package.json` file to prevent users without v10+ performing the upgrade (for example via the palette) and failing with compile errors (from node-gyp)?

---

<div class="post-metadata">

**Author:** ![knolleary](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/knolleary/32/3_2.png) [@knolleary](https://discourse.nodered.org/u/knolleary)\
**Post date:** [11 January 2020 09:22 UTC](https://discourse.nodered.org/t/is-it-possible-to-add-a-dependency-to-a-node-js-version/20190/2 "2020-01-11T09:22:16Z")

</div>

You can add an engines section to your package.json - [https://docs.npmjs.com/files/package.json#engines](https://docs.npmjs.com/files/package.json#engines)

However, by default, that will only produce an advisory warning in the log. Strict checking is only done if the user has enabled it in their own npm configuration.

Worth remembering that Node 8 is no longer maintained (as of a couple weeks ago) so users should really be on Node 10 at least.

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [11 January 2020 09:37 UTC](https://discourse.nodered.org/t/is-it-possible-to-add-a-dependency-to-a-node-js-version/20190/3 "2020-01-11T09:37:36Z")

</div>

I notice that [the node red docs](https://nodered.org/docs/faq/node-versions) suggest that V8 is still supported in node-red. Should that be amended?

---

<div class="post-metadata">

**Author:** ![knolleary](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/knolleary/32/3_2.png) [@knolleary](https://discourse.nodered.org/u/knolleary)\
**Post date:** [11 January 2020 09:48 UTC](https://discourse.nodered.org/t/is-it-possible-to-add-a-dependency-to-a-node-js-version/20190/4 "2020-01-11T09:48:54Z")

</div>

> [@Colin](#):
>
> I notice that [the node red docs](https://nodered.org/docs/faq/node-versions) suggest that V8 is still supported in node-red

Node-RED does still support being run on Node 8. That hasn't changed. But you'll also note it says it is going end of life 31st December 2019.

---

<div class="post-metadata">

**Author:** ![Achronite](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/achronite/32/31868_2.png) [@Achronite](https://discourse.nodered.org/u/Achronite)\
**Post date:** [17 January 2020 19:30 UTC](https://discourse.nodered.org/t/is-it-possible-to-add-a-dependency-to-a-node-js-version/20190/5 "2020-01-17T19:30:11Z")

</div>

I've added engines section now to my node module, but I still didn't get the advisory message using node v8.12 and node-red v0.8.4.

> <https://github.com/Achronite/node-red-contrib-energenie-ener314rt/blob/master/package.json>

17 Jan 19:24:35 - [info] Upgrading module: node-red-contrib-energenie-ener314rt to version: 0.3.2  
17 Jan 19:26:24 - [warn] Installation of module node-red-contrib-energenie-ener314rt failed:  
17 Jan 19:26:24 - [warn] ------------------------------------------  
17 Jan 19:26:24 - [warn]

> energenie-ener314rt@0.3.2 install /home/pi/.node-red/node\_modules/energenie-ener314rt  
> node-gyp rebuild  
> make: Entering directory '/home/pi/.node-red/node\_modules/energenie-ener314rt/build'  
> CC(target) Release/obj.target/ener314rt/C/achronite/napi\_energenie.o  
> ../C/achronite/napi\_energenie.c:58:5: error: unknown type name ânapi\_threadsafe\_functionâ  
> napi\_threadsafe\_function tsfn;  
> ^ ~~~~~~~~~~~~~~~~~~~~~~~  
> In file included from ../C/achronite/napi\_energenie.c:4:0:  
> ../C/achronite/napi\_energenie.c: In function âtx\_openThings\_receive\_threadâ:  
> ../C/achronite/napi\_energenie.c:628:12: warning: implicit declaration of function ânapi\_acquire\_threadsafe\_functionâ [-Wimplicit-function-declaration]  
> assert(napi\_acquire\_threadsafe\_function(addon\_data-\>tsfn) == napi\_ok);  
> ^  
> ../C/achronite/napi\_energenie.c:645:20: warning: implicit declaration of function ânapi\_call\_threadsafe\_functionâ [-Wimplicit-function-declaration]  
> assert(napi\_call\_threadsafe\_function(addon\_data-\>tsfn,  
> ^  
> ../C/achronite/napi\_energenie.c:647:50: error: ânapi\_tsfn\_blockingâ undeclared (first use in this function)  
> napi\_tsfn\_blocking) == napi\_ok);  
> ^  
> ../C/achronite/napi\_energenie.c:647:50: note: each undeclared identifier is reported only once for each function it appears in  
> ../C/achronite/napi\_energenie.c:658:12: warning: implicit declaration of function ânapi\_release\_threadsafe\_functionâ [-Wimplicit-function-declaration]  
> assert(napi\_release\_threadsafe\_function(addon\_data-\>tsfn, napi\_tsfn\_release) == napi\_ok);  
> ^  
> ../C/achronite/napi\_energenie.c:658:63: error: ânapi\_tsfn\_releaseâ undeclared (first use in this function)  
> assert(napi\_release\_threadsafe\_function(addon\_data-\>tsfn, napi\_tsfn\_release) == napi\_ok);  
> ^  
> ../C/achronite/napi\_energenie.c: In function âtc\_openThings\_receive\_threadâ:  
> ../C/achronite/napi\_energenie.c:672:45: error: ânapi\_tsfn\_releaseâ undeclared (first use in this function)  
> napi\_tsfn\_release) == napi\_ok);  
> ^  
> ../C/achronite/napi\_energenie.c:677:22: warning: assignment makes integer from pointer without a cast [-Wint-conversion]  
> addon\_data-\>tsfn = NULL;  
> ^  
> ../C/achronite/napi\_energenie.c: In function âtf\_openThings\_receive\_threadâ:  
> ../C/achronite/napi\_energenie.c:747:22: warning: implicit declaration of function ânapi\_create\_threadsafe\_functionâ [-Wimplicit-function-declaration]  
> status = napi\_create\_threadsafe\_function(env,  
> ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
> ener314rt.target.mk:105: recipe for target 'Release/obj.target/ener314rt/C/achronite/napi\_energenie.o' failed  
> make: Leaving directory '/home/pi/.node-red/node\_modules/energenie-ener314rt/build'  
> make: \*\*\* [Release/obj.target/ener314rt/C/achronite/napi\_energenie.o] Error 1  
> gyp ERR! build error  
> gyp ERR! stack Error: `make` failed with exit code: 2  
> gyp ERR! stack at ChildProcess.onExit (/usr/lib/node\_modules/npm/node\_modules/node-gyp/lib/build.js:262:23)  
> gyp ERR! stack at emitTwo (events.js:126:13)  
> gyp ERR! stack at ChildProcess.emit (events.js:214:7)  
> gyp ERR! stack at Process.ChildProcess.\_handle.onexit (internal/child\_process.js:198:12)  
> gyp ERR! System Linux 4.14.71-v7+  
> gyp ERR! command "/usr/bin/node" "/usr/lib/node\_modules/npm/node\_modules/node-gyp/bin/node-gyp.js" "rebuild"  
> gyp ERR! cwd /home/pi/.node-red/node\_modules/energenie-ener314rt  
> gyp ERR! node -v v8.12.0  
> gyp ERR! node-gyp -v v3.8.0  
> gyp ERR! not ok  
> npm WARN node-red-project@0.0.1 No repository field.  
> npm WARN node-red-project@0.0.1 No license field.  
> npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node\_modules/fsevents):  
> npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})  
> npm ERR! code ELIFECYCLE  
> npm ERR! errno 1  
> npm ERR! energenie-ener314rt@0.3.2 install: `node-gyp rebuild`  
> npm ERR! Exit status 1  
> npm ERR!  
> npm ERR! Failed at the energenie-ener314rt@0.3.2 install script.  
> npm ERR! This is probably not a problem with npm. There is likely additional logging output above.  
> npm ERR! A complete log of this run can be found in:  
> npm ERR! /home/pi/.npm/\_logs/2020-01-17T19\_26\_23\_021Z-debug.log  
> 17 Jan 19:26:24 - [warn] ------------------------------------------
