diff --git a/meta/classes-recipe/vendor_npm_build.bbclass b/meta/classes-recipe/vendor_npm_build.bbclass
new file mode 100644
index 0000000000..1cef316e01
--- /dev/null
+++ b/meta/classes-recipe/vendor_npm_build.bbclass
@@ -0,0 +1,50 @@
+# Copyright (C) 2025 Weidmueller Interface GmbH & Co. KG
+# Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
+#
+# SPDX-License-Identifier: MIT
+#
+
+NPM_BUILD_TARGET ?= "build"
+EXTRA_OENPM_BUILD ?= ""
+NPM_REBUILD ?= "1"
+
+inherit vendor_npm
+
+NPM_INSTALL_DEV = "1"
+NPM_PRUNE_DEV = "1"
+
+NPM_NATIVE_ARCH ?= "${@map_nodejs_arch(d.getVar("BUILD_ARCH"), d)}"
+
+NPM_BUILD_NATIVE_FLAGS = "\
+    ${NPM_COMMON_FLAGS} \
+    --arch=${NPM_NATIVE_ARCH} \
+    --target_arch=${NPM_NATIVE_ARCH} \
+"
+
+NPM_BUILD_NATIVE_ENVS = "\
+    CC="${BUILD_CC}" \
+    CXX="${BUILD_CXX}" \
+    LINK="${BUILD_CC}" \
+    AR="${BUILD_AR}" \
+    CPPFLAGS="${BUILD_CPPFLAGS}" \
+    CFLAGS="${BUILD_CFLAGS}" \
+    CXXFLAGS="${BUILD_CXXFLAGS}" \
+    LDFLAGS="${BUILD_LDFLAGS}" \
+"
+
+oe_run_npm_native() {
+    bbnote "${NPM_BUILD_NATIVE_ENVS} ${NPM} $@"
+    ${NPM_BUILD_NATIVE_ENVS} ${NPM} "$@"
+}
+
+vendor_npm_build_do_compile() {
+    oe_run_npm_native rebuild ${NPM_BUILD_NATIVE_FLAGS}
+
+    oe_run_npm_native run ${NPM_BUILD_TARGET} ${NPM_BUILD_NATIVE_FLAGS} ${EXTRA_OENPM_BUILD}
+
+    if "${@['false', 'true'][oe.types.boolean(d.getVar('NPM_REBUILD'))]}"; then
+        vendor_npm_do_compile
+    fi
+}
+
+EXPORT_FUNCTIONS do_compile
