* [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path @ 2022-09-25 19:20 Thomas Petazzoni 2022-09-25 19:20 ` [Buildroot] [PATCH v2 2/2] support/testing/tests: add NodeJS tests Thomas Petazzoni 2023-02-08 13:51 ` [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path Romain Naour 0 siblings, 2 replies; 6+ messages in thread From: Thomas Petazzoni @ 2022-09-25 19:20 UTC (permalink / raw) To: buildroot; +Cc: Daniel Price, Thomas Petazzoni, Martin Bark By default, NodeJS searches global modules in /usr/lib/node, but NPM installs them in /usr/lib/node_modules/. Therefore by default, if one installs modules with BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL, they are not accessible by NodeJS, unless by passing a NODE_PATH=/usr/lib/node_modules/ variable. Since this is not obvious, and it's nicer when things work out of the box, we simply patch NodeJS to look for modules at the right place. See https://stackoverflow.com/questions/15636367/nodejs-require-a-global-module-package for some discussions on this topic. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> --- Changes since v1: - Search for both /usr/lib/node and /usr/lib/node_modules as suggested by Yann --- ...ules-cjs-loader.js-adjust-default-pa.patch | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch diff --git a/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch b/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch new file mode 100644 index 0000000000..5b93998e5e --- /dev/null +++ b/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch @@ -0,0 +1,36 @@ +From a31425bdfcb5d695ab25c3d295898326784cffec Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni <thomas.petazzoni@bootlin.com> +Date: Sun, 25 Sep 2022 11:10:06 +0200 +Subject: [PATCH] lib/internal/modules/cjs/loader.js: adjust default path to + search modules + +NPM installs modules in /usr/lib/node_modules/, but by default NodeJS +searches for them only in /usr/lib/node/. We could also set the +NODE_PATH environment variable, but it is more convienient to have +NodeJS configured by default to find modules where they are installed. + +This issue is discussed at +https://stackoverflow.com/questions/15636367/nodejs-require-a-global-module-package. + +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> +--- + lib/internal/modules/cjs/loader.js | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js +index f1971c40a4..5fe3884156 100644 +--- a/lib/internal/modules/cjs/loader.js ++++ b/lib/internal/modules/cjs/loader.js +@@ -1261,7 +1261,8 @@ Module._initPaths = function() { + path.resolve(process.execPath, '..') : + path.resolve(process.execPath, '..', '..'); + +- const paths = [path.resolve(prefixDir, 'lib', 'node')]; ++ const paths = [path.resolve(prefixDir, 'lib', 'node'), ++ path.resolve(prefixDir, 'lib', 'node_modules')]; + + if (homeDir) { + ArrayPrototypeUnshift(paths, path.resolve(homeDir, '.node_libraries')); +-- +2.37.3 + -- 2.37.3 _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH v2 2/2] support/testing/tests: add NodeJS tests 2022-09-25 19:20 [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path Thomas Petazzoni @ 2022-09-25 19:20 ` Thomas Petazzoni 2023-02-08 15:43 ` Romain Naour 2023-02-08 13:51 ` [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path Romain Naour 1 sibling, 1 reply; 6+ messages in thread From: Thomas Petazzoni @ 2022-09-25 19:20 UTC (permalink / raw) To: buildroot; +Cc: Thomas Petazzoni This commit adds two new test cases: - TestNodeJSBasic which builds a target configuration with just NodeJS enabled, and which runs a very simple NodeJS script on the target. - TestNodeJSModule, which builds a target configuration with NodeJS enabled + the installation of one extra module, which means npm on the host (from host-nodejs) is used, and which runs a very simple NodeJS script on the target that uses this extra module. Having both tests separately allows to validate that both nodejs-only and nodejs+host-nodejs configurations behave correctly, at least in minimal scenarios. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> --- DEVELOPERS | 3 ++ .../tests/package/sample_nodejs_basic.js | 3 ++ .../tests/package/sample_nodejs_module.js | 7 +++ support/testing/tests/package/test_nodejs.py | 52 +++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 support/testing/tests/package/sample_nodejs_basic.js create mode 100644 support/testing/tests/package/sample_nodejs_module.js create mode 100644 support/testing/tests/package/test_nodejs.py diff --git a/DEVELOPERS b/DEVELOPERS index 51d025173a..564149de0f 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -2927,11 +2927,14 @@ F: package/weston/ F: support/testing/tests/boot/test_grub.py F: support/testing/tests/boot/test_grub/ F: support/testing/tests/boot/test_syslinux.py +F: support/testing/tests/package/sample_nodejs_basic.js +F: support/testing/tests/package/sample_nodejs_module.js F: support/testing/tests/package/sample_python_augeas.py F: support/testing/tests/package/sample_python_flask.py F: support/testing/tests/package/sample_python_flask_expects_json.py F: support/testing/tests/package/sample_python_git.py F: support/testing/tests/package/sample_python_unittest_xml_reporting.py +F: support/testing/tests/package/test_nodejs.py F: support/testing/tests/package/test_python_augeas.py F: support/testing/tests/package/test_python_flask.py F: support/testing/tests/package/test_python_flask_expects_json.py diff --git a/support/testing/tests/package/sample_nodejs_basic.js b/support/testing/tests/package/sample_nodejs_basic.js new file mode 100644 index 0000000000..7633173c64 --- /dev/null +++ b/support/testing/tests/package/sample_nodejs_basic.js @@ -0,0 +1,3 @@ +var assert = require('assert'); +assert.strictEqual(1, 1); +console.log("Hello World"); diff --git a/support/testing/tests/package/sample_nodejs_module.js b/support/testing/tests/package/sample_nodejs_module.js new file mode 100644 index 0000000000..57aee73408 --- /dev/null +++ b/support/testing/tests/package/sample_nodejs_module.js @@ -0,0 +1,7 @@ +var assert = require('assert'); +var lodash = require('lodash'); +result = lodash.chunk(['a', 'b', 'c', 'd'], 2); +expected = [ [ 'a', 'b' ], [ 'c', 'd' ] ]; +assert.deepStrictEqual(result, expected) + + diff --git a/support/testing/tests/package/test_nodejs.py b/support/testing/tests/package/test_nodejs.py new file mode 100644 index 0000000000..9463c76b72 --- /dev/null +++ b/support/testing/tests/package/test_nodejs.py @@ -0,0 +1,52 @@ +import os + +import infra.basetest + + +class TestNodeJSBasic(infra.basetest.BRTest): + config = \ + """ + BR2_arm=y + BR2_cortex_a9=y + BR2_ARM_ENABLE_VFP=y + BR2_TOOLCHAIN_EXTERNAL=y + BR2_PACKAGE_NODEJS=y + BR2_TARGET_ROOTFS_CPIO=y + # BR2_TARGET_ROOTFS_TAR is not set + BR2_ROOTFS_POST_BUILD_SCRIPT="{}" + BR2_ROOTFS_POST_SCRIPT_ARGS="{}" + """.format(infra.filepath("tests/package/copy-sample-script-to-target.sh"), + infra.filepath("tests/package/sample_nodejs_basic.js")) + + def test_run(self): + cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") + self.emulator.boot(arch="armv7", + kernel="builtin", + options=["-initrd", cpio_file]) + self.emulator.login() + self.assertRunOk("node sample_nodejs_basic.js") + + +class TestNodeJSModule(infra.basetest.BRTest): + config = \ + """ + BR2_arm=y + BR2_cortex_a9=y + BR2_ARM_ENABLE_VFP=y + BR2_TOOLCHAIN_EXTERNAL=y + BR2_PACKAGE_NODEJS=y + BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL="lodash" + BR2_TARGET_ROOTFS_CPIO=y + # BR2_TARGET_ROOTFS_TAR is not set + BR2_ROOTFS_POST_BUILD_SCRIPT="{}" + BR2_ROOTFS_POST_SCRIPT_ARGS="{}" + """.format(infra.filepath("tests/package/copy-sample-script-to-target.sh"), + infra.filepath("tests/package/sample_nodejs_module.js")) + + def test_run(self): + cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") + self.emulator.boot(arch="armv7", + kernel="builtin", + options=["-initrd", cpio_file]) + self.emulator.login() + self.assertRunOk("node sample_nodejs_module.js") -- 2.37.3 _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH v2 2/2] support/testing/tests: add NodeJS tests 2022-09-25 19:20 ` [Buildroot] [PATCH v2 2/2] support/testing/tests: add NodeJS tests Thomas Petazzoni @ 2023-02-08 15:43 ` Romain Naour 2023-02-10 23:18 ` Yann E. MORIN 0 siblings, 1 reply; 6+ messages in thread From: Romain Naour @ 2023-02-08 15:43 UTC (permalink / raw) To: Thomas Petazzoni, buildroot Hello, Le 25/09/2022 à 21:20, Thomas Petazzoni a écrit : > This commit adds two new test cases: > > - TestNodeJSBasic which builds a target configuration with just > NodeJS enabled, and which runs a very simple NodeJS script on the > target. > > - TestNodeJSModule, which builds a target configuration with NodeJS > enabled + the installation of one extra module, which means npm on > the host (from host-nodejs) is used, and which runs a very simple > NodeJS script on the target that uses this extra module. > > Having both tests separately allows to validate that both nodejs-only > and nodejs+host-nodejs configurations behave correctly, at least in > minimal scenarios. NodeJS takes ages to build Tested-by: Romain Naour <romain.naour@smile.fr> Best regards, Romain > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > --- > DEVELOPERS | 3 ++ > .../tests/package/sample_nodejs_basic.js | 3 ++ > .../tests/package/sample_nodejs_module.js | 7 +++ > support/testing/tests/package/test_nodejs.py | 52 +++++++++++++++++++ > 4 files changed, 65 insertions(+) > create mode 100644 support/testing/tests/package/sample_nodejs_basic.js > create mode 100644 support/testing/tests/package/sample_nodejs_module.js > create mode 100644 support/testing/tests/package/test_nodejs.py > > diff --git a/DEVELOPERS b/DEVELOPERS > index 51d025173a..564149de0f 100644 > --- a/DEVELOPERS > +++ b/DEVELOPERS > @@ -2927,11 +2927,14 @@ F: package/weston/ > F: support/testing/tests/boot/test_grub.py > F: support/testing/tests/boot/test_grub/ > F: support/testing/tests/boot/test_syslinux.py > +F: support/testing/tests/package/sample_nodejs_basic.js > +F: support/testing/tests/package/sample_nodejs_module.js > F: support/testing/tests/package/sample_python_augeas.py > F: support/testing/tests/package/sample_python_flask.py > F: support/testing/tests/package/sample_python_flask_expects_json.py > F: support/testing/tests/package/sample_python_git.py > F: support/testing/tests/package/sample_python_unittest_xml_reporting.py > +F: support/testing/tests/package/test_nodejs.py > F: support/testing/tests/package/test_python_augeas.py > F: support/testing/tests/package/test_python_flask.py > F: support/testing/tests/package/test_python_flask_expects_json.py > diff --git a/support/testing/tests/package/sample_nodejs_basic.js b/support/testing/tests/package/sample_nodejs_basic.js > new file mode 100644 > index 0000000000..7633173c64 > --- /dev/null > +++ b/support/testing/tests/package/sample_nodejs_basic.js > @@ -0,0 +1,3 @@ > +var assert = require('assert'); > +assert.strictEqual(1, 1); > +console.log("Hello World"); > diff --git a/support/testing/tests/package/sample_nodejs_module.js b/support/testing/tests/package/sample_nodejs_module.js > new file mode 100644 > index 0000000000..57aee73408 > --- /dev/null > +++ b/support/testing/tests/package/sample_nodejs_module.js > @@ -0,0 +1,7 @@ > +var assert = require('assert'); > +var lodash = require('lodash'); > +result = lodash.chunk(['a', 'b', 'c', 'd'], 2); > +expected = [ [ 'a', 'b' ], [ 'c', 'd' ] ]; > +assert.deepStrictEqual(result, expected) > + > + > diff --git a/support/testing/tests/package/test_nodejs.py b/support/testing/tests/package/test_nodejs.py > new file mode 100644 > index 0000000000..9463c76b72 > --- /dev/null > +++ b/support/testing/tests/package/test_nodejs.py > @@ -0,0 +1,52 @@ > +import os > + > +import infra.basetest > + > + > +class TestNodeJSBasic(infra.basetest.BRTest): > + config = \ > + """ > + BR2_arm=y > + BR2_cortex_a9=y > + BR2_ARM_ENABLE_VFP=y > + BR2_TOOLCHAIN_EXTERNAL=y > + BR2_PACKAGE_NODEJS=y > + BR2_TARGET_ROOTFS_CPIO=y > + # BR2_TARGET_ROOTFS_TAR is not set > + BR2_ROOTFS_POST_BUILD_SCRIPT="{}" > + BR2_ROOTFS_POST_SCRIPT_ARGS="{}" > + """.format(infra.filepath("tests/package/copy-sample-script-to-target.sh"), > + infra.filepath("tests/package/sample_nodejs_basic.js")) > + > + def test_run(self): > + cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") > + self.emulator.boot(arch="armv7", > + kernel="builtin", > + options=["-initrd", cpio_file]) > + self.emulator.login() > + self.assertRunOk("node sample_nodejs_basic.js") > + > + > +class TestNodeJSModule(infra.basetest.BRTest): > + config = \ > + """ > + BR2_arm=y > + BR2_cortex_a9=y > + BR2_ARM_ENABLE_VFP=y > + BR2_TOOLCHAIN_EXTERNAL=y > + BR2_PACKAGE_NODEJS=y > + BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL="lodash" > + BR2_TARGET_ROOTFS_CPIO=y > + # BR2_TARGET_ROOTFS_TAR is not set > + BR2_ROOTFS_POST_BUILD_SCRIPT="{}" > + BR2_ROOTFS_POST_SCRIPT_ARGS="{}" > + """.format(infra.filepath("tests/package/copy-sample-script-to-target.sh"), > + infra.filepath("tests/package/sample_nodejs_module.js")) > + > + def test_run(self): > + cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") > + self.emulator.boot(arch="armv7", > + kernel="builtin", > + options=["-initrd", cpio_file]) > + self.emulator.login() > + self.assertRunOk("node sample_nodejs_module.js") _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH v2 2/2] support/testing/tests: add NodeJS tests 2023-02-08 15:43 ` Romain Naour @ 2023-02-10 23:18 ` Yann E. MORIN 0 siblings, 0 replies; 6+ messages in thread From: Yann E. MORIN @ 2023-02-10 23:18 UTC (permalink / raw) To: Romain Naour; +Cc: Thomas Petazzoni, buildroot Thomas, All, On 2023-02-08 16:43 +0100, Romain Naour spake thusly: > Le 25/09/2022 à 21:20, Thomas Petazzoni a écrit : > > This commit adds two new test cases: > > > > - TestNodeJSBasic which builds a target configuration with just > > NodeJS enabled, and which runs a very simple NodeJS script on the > > target. > > > > - TestNodeJSModule, which builds a target configuration with NodeJS > > enabled + the installation of one extra module, which means npm on > > the host (from host-nodejs) is used, and which runs a very simple > > NodeJS script on the target that uses this extra module. > > > > Having both tests separately allows to validate that both nodejs-only > > and nodejs+host-nodejs configurations behave correctly, at least in > > minimal scenarios. > > NodeJS takes ages to build Muahahaha! :-) > Tested-by: Romain Naour <romain.naour@smile.fr> I could not find the original patch in my mailbox, so I'll reply here: Applied to master, thanks. Regards, Yann E. MORIN. > > Best regards, > Romain > > > > > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > > --- > > DEVELOPERS | 3 ++ > > .../tests/package/sample_nodejs_basic.js | 3 ++ > > .../tests/package/sample_nodejs_module.js | 7 +++ > > support/testing/tests/package/test_nodejs.py | 52 +++++++++++++++++++ > > 4 files changed, 65 insertions(+) > > create mode 100644 support/testing/tests/package/sample_nodejs_basic.js > > create mode 100644 support/testing/tests/package/sample_nodejs_module.js > > create mode 100644 support/testing/tests/package/test_nodejs.py > > > > diff --git a/DEVELOPERS b/DEVELOPERS > > index 51d025173a..564149de0f 100644 > > --- a/DEVELOPERS > > +++ b/DEVELOPERS > > @@ -2927,11 +2927,14 @@ F: package/weston/ > > F: support/testing/tests/boot/test_grub.py > > F: support/testing/tests/boot/test_grub/ > > F: support/testing/tests/boot/test_syslinux.py > > +F: support/testing/tests/package/sample_nodejs_basic.js > > +F: support/testing/tests/package/sample_nodejs_module.js > > F: support/testing/tests/package/sample_python_augeas.py > > F: support/testing/tests/package/sample_python_flask.py > > F: support/testing/tests/package/sample_python_flask_expects_json.py > > F: support/testing/tests/package/sample_python_git.py > > F: support/testing/tests/package/sample_python_unittest_xml_reporting.py > > +F: support/testing/tests/package/test_nodejs.py > > F: support/testing/tests/package/test_python_augeas.py > > F: support/testing/tests/package/test_python_flask.py > > F: support/testing/tests/package/test_python_flask_expects_json.py > > diff --git a/support/testing/tests/package/sample_nodejs_basic.js b/support/testing/tests/package/sample_nodejs_basic.js > > new file mode 100644 > > index 0000000000..7633173c64 > > --- /dev/null > > +++ b/support/testing/tests/package/sample_nodejs_basic.js > > @@ -0,0 +1,3 @@ > > +var assert = require('assert'); > > +assert.strictEqual(1, 1); > > +console.log("Hello World"); > > diff --git a/support/testing/tests/package/sample_nodejs_module.js b/support/testing/tests/package/sample_nodejs_module.js > > new file mode 100644 > > index 0000000000..57aee73408 > > --- /dev/null > > +++ b/support/testing/tests/package/sample_nodejs_module.js > > @@ -0,0 +1,7 @@ > > +var assert = require('assert'); > > +var lodash = require('lodash'); > > +result = lodash.chunk(['a', 'b', 'c', 'd'], 2); > > +expected = [ [ 'a', 'b' ], [ 'c', 'd' ] ]; > > +assert.deepStrictEqual(result, expected) > > + > > + > > diff --git a/support/testing/tests/package/test_nodejs.py b/support/testing/tests/package/test_nodejs.py > > new file mode 100644 > > index 0000000000..9463c76b72 > > --- /dev/null > > +++ b/support/testing/tests/package/test_nodejs.py > > @@ -0,0 +1,52 @@ > > +import os > > + > > +import infra.basetest > > + > > + > > +class TestNodeJSBasic(infra.basetest.BRTest): > > + config = \ > > + """ > > + BR2_arm=y > > + BR2_cortex_a9=y > > + BR2_ARM_ENABLE_VFP=y > > + BR2_TOOLCHAIN_EXTERNAL=y > > + BR2_PACKAGE_NODEJS=y > > + BR2_TARGET_ROOTFS_CPIO=y > > + # BR2_TARGET_ROOTFS_TAR is not set > > + BR2_ROOTFS_POST_BUILD_SCRIPT="{}" > > + BR2_ROOTFS_POST_SCRIPT_ARGS="{}" > > + """.format(infra.filepath("tests/package/copy-sample-script-to-target.sh"), > > + infra.filepath("tests/package/sample_nodejs_basic.js")) > > + > > + def test_run(self): > > + cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") > > + self.emulator.boot(arch="armv7", > > + kernel="builtin", > > + options=["-initrd", cpio_file]) > > + self.emulator.login() > > + self.assertRunOk("node sample_nodejs_basic.js") > > + > > + > > +class TestNodeJSModule(infra.basetest.BRTest): > > + config = \ > > + """ > > + BR2_arm=y > > + BR2_cortex_a9=y > > + BR2_ARM_ENABLE_VFP=y > > + BR2_TOOLCHAIN_EXTERNAL=y > > + BR2_PACKAGE_NODEJS=y > > + BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL="lodash" > > + BR2_TARGET_ROOTFS_CPIO=y > > + # BR2_TARGET_ROOTFS_TAR is not set > > + BR2_ROOTFS_POST_BUILD_SCRIPT="{}" > > + BR2_ROOTFS_POST_SCRIPT_ARGS="{}" > > + """.format(infra.filepath("tests/package/copy-sample-script-to-target.sh"), > > + infra.filepath("tests/package/sample_nodejs_module.js")) > > + > > + def test_run(self): > > + cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") > > + self.emulator.boot(arch="armv7", > > + kernel="builtin", > > + options=["-initrd", cpio_file]) > > + self.emulator.login() > > + self.assertRunOk("node sample_nodejs_module.js") > > _______________________________________________ > buildroot mailing list > buildroot@buildroot.org > https://lists.buildroot.org/mailman/listinfo/buildroot -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------' _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path 2022-09-25 19:20 [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path Thomas Petazzoni 2022-09-25 19:20 ` [Buildroot] [PATCH v2 2/2] support/testing/tests: add NodeJS tests Thomas Petazzoni @ 2023-02-08 13:51 ` Romain Naour 2023-02-10 23:18 ` Yann E. MORIN 1 sibling, 1 reply; 6+ messages in thread From: Romain Naour @ 2023-02-08 13:51 UTC (permalink / raw) To: Thomas Petazzoni, buildroot; +Cc: Daniel Price, Martin Bark Hello Thomas, Le 25/09/2022 à 21:20, Thomas Petazzoni a écrit : > By default, NodeJS searches global modules in /usr/lib/node, but NPM > installs them in /usr/lib/node_modules/. Therefore by default, if one > installs modules with BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL, they are > not accessible by NodeJS, unless by passing a > NODE_PATH=/usr/lib/node_modules/ variable. Since this is not obvious, > and it's nicer when things work out of the box, we simply patch NodeJS > to look for modules at the right place. > > See > https://stackoverflow.com/questions/15636367/nodejs-require-a-global-module-package > for some discussions on this topic. Note: The nodejs package has been update to 16.18.1 since your v2 of nodejs series. Reviewed-by: Romain Naour <romain.naour@smile.fr> Best regards, Romain > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > --- > Changes since v1: > - Search for both /usr/lib/node and /usr/lib/node_modules as suggested > by Yann > --- > ...ules-cjs-loader.js-adjust-default-pa.patch | 36 +++++++++++++++++++ > 1 file changed, 36 insertions(+) > create mode 100644 package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch > > diff --git a/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch b/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch > new file mode 100644 > index 0000000000..5b93998e5e > --- /dev/null > +++ b/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch > @@ -0,0 +1,36 @@ > +From a31425bdfcb5d695ab25c3d295898326784cffec Mon Sep 17 00:00:00 2001 > +From: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > +Date: Sun, 25 Sep 2022 11:10:06 +0200 > +Subject: [PATCH] lib/internal/modules/cjs/loader.js: adjust default path to > + search modules > + > +NPM installs modules in /usr/lib/node_modules/, but by default NodeJS > +searches for them only in /usr/lib/node/. We could also set the > +NODE_PATH environment variable, but it is more convienient to have > +NodeJS configured by default to find modules where they are installed. > + > +This issue is discussed at > +https://stackoverflow.com/questions/15636367/nodejs-require-a-global-module-package. > + > +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > +--- > + lib/internal/modules/cjs/loader.js | 3 ++- > + 1 file changed, 2 insertions(+), 1 deletion(-) > + > +diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js > +index f1971c40a4..5fe3884156 100644 > +--- a/lib/internal/modules/cjs/loader.js > ++++ b/lib/internal/modules/cjs/loader.js > +@@ -1261,7 +1261,8 @@ Module._initPaths = function() { > + path.resolve(process.execPath, '..') : > + path.resolve(process.execPath, '..', '..'); > + > +- const paths = [path.resolve(prefixDir, 'lib', 'node')]; > ++ const paths = [path.resolve(prefixDir, 'lib', 'node'), > ++ path.resolve(prefixDir, 'lib', 'node_modules')]; > + > + if (homeDir) { > + ArrayPrototypeUnshift(paths, path.resolve(homeDir, '.node_libraries')); > +-- > +2.37.3 > + _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path 2023-02-08 13:51 ` [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path Romain Naour @ 2023-02-10 23:18 ` Yann E. MORIN 0 siblings, 0 replies; 6+ messages in thread From: Yann E. MORIN @ 2023-02-10 23:18 UTC (permalink / raw) To: Romain Naour; +Cc: Martin Bark, Daniel Price, Thomas Petazzoni, buildroot Thomas, All, On 2023-02-08 14:51 +0100, Romain Naour spake thusly: > Le 25/09/2022 à 21:20, Thomas Petazzoni a écrit : > > By default, NodeJS searches global modules in /usr/lib/node, but NPM > > installs them in /usr/lib/node_modules/. Therefore by default, if one > > installs modules with BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL, they are > > not accessible by NodeJS, unless by passing a > > NODE_PATH=/usr/lib/node_modules/ variable. Since this is not obvious, > > and it's nicer when things work out of the box, we simply patch NodeJS > > to look for modules at the right place. > > > > See > > https://stackoverflow.com/questions/15636367/nodejs-require-a-global-module-package > > for some discussions on this topic. > > Note: The nodejs package has been update to 16.18.1 since your v2 of nodejs series. > > Reviewed-by: Romain Naour <romain.naour@smile.fr> I could not find the original patch in my mailbox, so I'll reply here: Applied to master, thanks. Regards, Yann E. MORIN. > Best regards, > Romain > > > > > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > > --- > > Changes since v1: > > - Search for both /usr/lib/node and /usr/lib/node_modules as suggested > > by Yann > > --- > > ...ules-cjs-loader.js-adjust-default-pa.patch | 36 +++++++++++++++++++ > > 1 file changed, 36 insertions(+) > > create mode 100644 package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch > > > > diff --git a/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch b/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch > > new file mode 100644 > > index 0000000000..5b93998e5e > > --- /dev/null > > +++ b/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch > > @@ -0,0 +1,36 @@ > > +From a31425bdfcb5d695ab25c3d295898326784cffec Mon Sep 17 00:00:00 2001 > > +From: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > > +Date: Sun, 25 Sep 2022 11:10:06 +0200 > > +Subject: [PATCH] lib/internal/modules/cjs/loader.js: adjust default path to > > + search modules > > + > > +NPM installs modules in /usr/lib/node_modules/, but by default NodeJS > > +searches for them only in /usr/lib/node/. We could also set the > > +NODE_PATH environment variable, but it is more convienient to have > > +NodeJS configured by default to find modules where they are installed. > > + > > +This issue is discussed at > > +https://stackoverflow.com/questions/15636367/nodejs-require-a-global-module-package. > > + > > +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > > +--- > > + lib/internal/modules/cjs/loader.js | 3 ++- > > + 1 file changed, 2 insertions(+), 1 deletion(-) > > + > > +diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js > > +index f1971c40a4..5fe3884156 100644 > > +--- a/lib/internal/modules/cjs/loader.js > > ++++ b/lib/internal/modules/cjs/loader.js > > +@@ -1261,7 +1261,8 @@ Module._initPaths = function() { > > + path.resolve(process.execPath, '..') : > > + path.resolve(process.execPath, '..', '..'); > > + > > +- const paths = [path.resolve(prefixDir, 'lib', 'node')]; > > ++ const paths = [path.resolve(prefixDir, 'lib', 'node'), > > ++ path.resolve(prefixDir, 'lib', 'node_modules')]; > > + > > + if (homeDir) { > > + ArrayPrototypeUnshift(paths, path.resolve(homeDir, '.node_libraries')); > > +-- > > +2.37.3 > > + > > _______________________________________________ > buildroot mailing list > buildroot@buildroot.org > https://lists.buildroot.org/mailman/listinfo/buildroot -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------' _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-02-10 23:18 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-09-25 19:20 [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path Thomas Petazzoni 2022-09-25 19:20 ` [Buildroot] [PATCH v2 2/2] support/testing/tests: add NodeJS tests Thomas Petazzoni 2023-02-08 15:43 ` Romain Naour 2023-02-10 23:18 ` Yann E. MORIN 2023-02-08 13:51 ` [Buildroot] [PATCH v2 1/2] package/nodejs: add patch to adjust default NodeJS search path Romain Naour 2023-02-10 23:18 ` Yann E. MORIN
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).