From 9089eddc0c2363023cf134106b1247cd88e2648d Mon Sep 17 00:00:00 2001 From: Robert Niederreiter Date: Mon, 17 Jun 2024 12:58:03 +0200 Subject: [PATCH] Rename `npm` domain to `nodejs` and add support for using `pnpm` as alternative package manager. --- CHANGES.md | 5 ++ src/mxmake/topics/docs/jsdoc.mk | 7 +- src/mxmake/topics/js/karma.mk | 7 +- src/mxmake/topics/js/nodejs.mk | 96 ++++++++++++++++++++++++ src/mxmake/topics/js/npm.mk | 90 ---------------------- src/mxmake/topics/js/rollup.mk | 7 +- src/mxmake/topics/js/scss.mk | 7 +- src/mxmake/topics/js/wtr.mk | 7 +- src/mxmake/topics/system/dependencies.mk | 1 - 9 files changed, 115 insertions(+), 112 deletions(-) create mode 100644 src/mxmake/topics/js/nodejs.mk delete mode 100644 src/mxmake/topics/js/npm.mk diff --git a/CHANGES.md b/CHANGES.md index be6ab5de..564c6256 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,11 @@ - Add `plone-site` template configuration to `mx.ini` template. +**Breaking changes** + +- Rename `npm` domain to `nodejs` and add support for using `pnpm` as + alternative package manager. + ## 1.0a5 (2024-06-07) - Export `OS` environment variable in `mxenv` domain to prevent warning on diff --git a/src/mxmake/topics/docs/jsdoc.mk b/src/mxmake/topics/docs/jsdoc.mk index 1f2d26cc..85961add 100644 --- a/src/mxmake/topics/docs/jsdoc.mk +++ b/src/mxmake/topics/docs/jsdoc.mk @@ -1,14 +1,11 @@ #:[jsdoc] #:title = JSDoc Documentation #:description = JSDoc installation and integration into Sphinx. -#:depends = js.npm +#:depends = js.nodejs ############################################################################## # jsdoc ############################################################################## -# extend npm dev packages -NPM_DEV_PACKAGES+=jsdoc - -# extend sphinx requirements and docs targets +NODEJS_DEV_PACKAGES+=jsdoc DOCS_REQUIREMENTS+=sphinx_js diff --git a/src/mxmake/topics/js/karma.mk b/src/mxmake/topics/js/karma.mk index 4a519d59..d82d2a60 100644 --- a/src/mxmake/topics/js/karma.mk +++ b/src/mxmake/topics/js/karma.mk @@ -1,7 +1,7 @@ #:[karma] #:title = Karma tests #:description = Run JavaScript tests using karma. -#:depends = js.npm +#:depends = js.nodejs #: #:[target.karma] #:description = Run karma. @@ -18,13 +18,12 @@ # karma ############################################################################## -# extend npm dev packages -NPM_DEV_PACKAGES+=\ +NODEJS_DEV_PACKAGES+=\ karma \ karma-coverage \ karma-chrome-launcher \ karma-module-resolver-preprocessor .PHONY: karma -karma: $(NPM_TARGET) +karma: $(NODEJS_TARGET) @karma start $(KARMA_CONFIG) $(KARMA_OPTIONS) diff --git a/src/mxmake/topics/js/nodejs.mk b/src/mxmake/topics/js/nodejs.mk new file mode 100644 index 00000000..eef96620 --- /dev/null +++ b/src/mxmake/topics/js/nodejs.mk @@ -0,0 +1,96 @@ +#:[nodejs] +#:title = Node.js +#:description = Provide targets for working with Node.js. A working version of +#: Node.js is expected to be installed. We suggest using `nvm` for managing +#: Node.JS installations. +#:depends = core.base +#: +#:[target.nodejs] +#:description = Installs Javascript packages using the current active node +#: version with the configured package manager. +#: +#:[target.nodejs-dirty] +#:description = Build :ref:`nodejs` target on next make run. +#: +#:[target.nodejs-clean] +#:description = Remove installed Javascript packages. +#: +#:[setting.NODEJS_PACKAGE_MANAGER] +#:description = The package manager to use. Defaults to `npm`. Possible values +#: are `npm` and `pnpm` +#:default = npm +#: +#:[setting.NODEJS_PREFIX] +#:description = Value for `--prefix` option when installing packages. +#:default = . +#: +#:[setting.NODEJS_PACKAGES] +#:description = Packages to install with `--no-save` option. +#:default = +#: +#:[setting.NODEJS_DEV_PACKAGES] +#:description = Packages to install with `--save-dev` option. +#:default = +#: +#:[setting.NODEJS_PROD_PACKAGES] +#:description = Packages to install with `--save-prod` option. +#:default = +#: +#:[setting.NODEJS_OPT_PACKAGES] +#:description = Packages to install with `--save-optional` option. +#:default = +#: +#:[setting.NODEJS_INSTALL_OPTS] +#:description = Additional install options. Possible values are `--save-exact` +#: and `--save-bundle`. +#:default = + +############################################################################## +# nodejs +############################################################################## + +export PATH:=$(shell pwd)/$(NODEJS_PREFIX)/node_modules/.bin:$(PATH) + + +NODEJS_TARGET:=$(SENTINEL_FOLDER)/nodejs.sentinel +$(NODEJS_TARGET): $(SENTINEL) + @echo "Install nodejs packages" + @test -z "$(NODEJS_DEV_PACKAGES)" \ + && echo "No dev packages to be installed" \ + || $(NODEJS_PACKAGE_MANAGER) --prefix $(NODEJS_PREFIX) install \ + --save-dev \ + $(NODEJS_INSTALL_OPTS) \ + $(NODEJS_DEV_PACKAGES) + @test -z "$(NODEJS_PROD_PACKAGES)" \ + && echo "No prod packages to be installed" \ + || $(NODEJS_PACKAGE_MANAGER) --prefix $(NODEJS_PREFIX) install \ + --save-prod \ + $(NODEJS_INSTALL_OPTS) \ + $(NODEJS_PROD_PACKAGES) + @test -z "$(NODEJS_OPT_PACKAGES)" \ + && echo "No opt packages to be installed" \ + || $(NODEJS_PACKAGE_MANAGER) --prefix $(NODEJS_PREFIX) install \ + --save-optional \ + $(NODEJS_INSTALL_OPTS) \ + $(NODEJS_OPT_PACKAGES) + @test -z "$(NODEJS_PACKAGES)" \ + && echo "No packages to be installed" \ + || $(NODEJS_PACKAGE_MANAGER) --prefix $(NODEJS_PREFIX) install \ + --no-save \ + $(NODEJS_PACKAGES) + @touch $(NODEJS_TARGET) + +.PHONY: nodejs +nodejs: $(NODEJS_TARGET) + +.PHONY: nodejs-dirty +nodejs-dirty: + @rm -f $(NODEJS_TARGET) + +.PHONY: nodejs-clean +nodejs-clean: nodejs-dirty + @rm -rf $(NODEJS_PREFIX)/node_modules + +INSTALL_TARGETS+=nodejs +DIRTY_TARGETS+=nodejs-dirty +CLEAN_TARGETS+=nodejs-clean diff --git a/src/mxmake/topics/js/npm.mk b/src/mxmake/topics/js/npm.mk deleted file mode 100644 index 4deabbe4..00000000 --- a/src/mxmake/topics/js/npm.mk +++ /dev/null @@ -1,90 +0,0 @@ -#:[npm] -#:title = Node Package Manager -#:description = Provide targets for working with Node Package Manager -#:depends = core.base -#: -#:[target.npm] -#:description = Installs packages with NPM. -#: -#:[target.npm-dirty] -#:description = Build :ref:`npm` target on next make run. -#: -#:[target.npm-clean] -#:description = Remove installed npm packages. -#: -#:[setting.NPM_PREFIX] -#:description = Value for `--prefix` option. -#:default = . -#: -#:[setting.NPM_PACKAGES] -#:description = Packages which get installed with `--no-save` option. -#:default = -#: -#:[setting.NPM_DEV_PACKAGES] -#:description = Packages which get installed with `--save-dev` option. -#:default = -#: -#:[setting.NPM_PROD_PACKAGES] -#:description = Packages which get installed with `--save-prod` option. -#:default = -#: -#:[setting.NPM_OPT_PACKAGES] -#:description = Packages which get installed with `--save-optional` option. -#:default = -#: -#:[setting.NPM_INSTALL_OPTS] -#:description = Additional install options. Possible values are `--save-exact` -#: and `--save-bundle`. -#:default = - -############################################################################## -# npm -############################################################################## - -export PATH:=$(shell pwd)/$(NPM_PREFIX)/node_modules/.bin:$(PATH) - -# case `system.dependencies` domain is included -SYSTEM_DEPENDENCIES+=npm - -NPM_TARGET:=$(SENTINEL_FOLDER)/npm.sentinel -$(NPM_TARGET): $(SENTINEL) - @echo "Install npm packages" - @test -z "$(NPM_DEV_PACKAGES)" \ - && echo "No dev packages to be installed" \ - || npm --prefix $(NPM_PREFIX) install \ - --save-dev \ - $(NPM_INSTALL_OPTS) \ - $(NPM_DEV_PACKAGES) - @test -z "$(NPM_PROD_PACKAGES)" \ - && echo "No prod packages to be installed" \ - || npm --prefix $(NPM_PREFIX) install \ - --save-prod \ - $(NPM_INSTALL_OPTS) \ - $(NPM_PROD_PACKAGES) - @test -z "$(NPM_OPT_PACKAGES)" \ - && echo "No opt packages to be installed" \ - || npm --prefix $(NPM_PREFIX) install \ - --save-optional \ - $(NPM_INSTALL_OPTS) \ - $(NPM_OPT_PACKAGES) - @test -z "$(NPM_PACKAGES)" \ - && echo "No packages to be installed" \ - || npm --prefix $(NPM_PREFIX) install \ - --no-save \ - $(NPM_PACKAGES) - @touch $(NPM_TARGET) - -.PHONY: npm -npm: $(NPM_TARGET) - -.PHONY: npm-dirty -npm-dirty: - @rm -f $(NPM_TARGET) - -.PHONY: npm-clean -npm-clean: npm-dirty - @rm -rf $(NPM_PREFIX)/node_modules - -INSTALL_TARGETS+=npm -DIRTY_TARGETS+=npm-dirty -CLEAN_TARGETS+=npm-clean diff --git a/src/mxmake/topics/js/rollup.mk b/src/mxmake/topics/js/rollup.mk index c3c163e1..e00e10d7 100644 --- a/src/mxmake/topics/js/rollup.mk +++ b/src/mxmake/topics/js/rollup.mk @@ -1,7 +1,7 @@ #:[rollup] #:title = Rollup JavaScript module bundler #:description = Create JavaScript bundles with rollup. -#:depends = js.npm +#:depends = js.nodejs #: #:[target.rollup] #:description = Run rollup JavaScript bundler. @@ -14,12 +14,11 @@ # rollup ############################################################################## -# extend npm dev packages -NPM_DEV_PACKAGES+=\ +NODEJS_DEV_PACKAGES+=\ rollup \ rollup-plugin-cleanup \ @rollup/plugin-terser .PHONY: rollup -rollup: $(NPM_TARGET) +rollup: $(NODEJS_TARGET) @rollup --config $(ROLLUP_CONFIG) diff --git a/src/mxmake/topics/js/scss.mk b/src/mxmake/topics/js/scss.mk index 31c269f3..92563283 100644 --- a/src/mxmake/topics/js/scss.mk +++ b/src/mxmake/topics/js/scss.mk @@ -1,7 +1,7 @@ #:[scss] #:title = SCSS Compiler #:description = Compile Stylesheets using SCSS. -#:depends = js.npm +#:depends = js.nodejs #: #:[target.scss] #:description = Run SCSS Stylesheet Compiler. @@ -26,10 +26,9 @@ # scss ############################################################################## -# extend npm dev packages -NPM_DEV_PACKAGES+=sass +NODEJS_DEV_PACKAGES+=sass .PHONY: scss -scss: $(NPM_TARGET) +scss: $(NODEJS_TARGET) @sass $(SCSS_OPTIONS) $(SCSS_SOURCE) $(SCSS_TARGET) @sass $(SCSS_OPTIONS) --style compressed $(SCSS_SOURCE) $(SCSS_MIN_TARGET) diff --git a/src/mxmake/topics/js/wtr.mk b/src/mxmake/topics/js/wtr.mk index 8f00403e..5a7d4f3c 100644 --- a/src/mxmake/topics/js/wtr.mk +++ b/src/mxmake/topics/js/wtr.mk @@ -1,7 +1,7 @@ #:[wtr] #:title = Web test runner #:description = Run JavaScript tests using web test runner. -#:depends = js.npm +#:depends = js.nodejs #: #:[target.wtr] #:description = Execute web test runner. @@ -18,11 +18,10 @@ # web test runner ############################################################################## -# extend npm dev packages -NPM_DEV_PACKAGES+=\ +NODEJS_DEV_PACKAGES+=\ @web/test-runner \ @web/dev-server-import-maps .PHONY: wtr -wtr: $(NPM_TARGET) +wtr: $(NODEJS_TARGET) @web-test-runner $(WTR_OPTIONS) --config $(WTR_CONFIG) diff --git a/src/mxmake/topics/system/dependencies.mk b/src/mxmake/topics/system/dependencies.mk index 568dc642..0a242710 100644 --- a/src/mxmake/topics/system/dependencies.mk +++ b/src/mxmake/topics/system/dependencies.mk @@ -2,7 +2,6 @@ #:title = System dependencies #:description = System dependency management. #:depends = core.base -#:soft-depends = js.npm #: #:[target.system-dependencies] #:description = Install system dependencies.