diff options
Diffstat (limited to 'meta/classes/npm.bbclass')
-rw-r--r-- | meta/classes/npm.bbclass | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/meta/classes/npm.bbclass b/meta/classes/npm.bbclass index fce4c1146f..4b1f0a39f0 100644 --- a/meta/classes/npm.bbclass +++ b/meta/classes/npm.bbclass @@ -2,7 +2,15 @@ DEPENDS_prepend = "nodejs-native " RDEPENDS_${PN}_prepend = "nodejs " S = "${WORKDIR}/npmpkg" -NPM_INSTALLDIR = "${D}${libdir}/node_modules/${PN}" +def node_pkgname(d): + bpn = d.getVar('BPN') + if bpn.startswith("node-"): + return bpn[5:] + return bpn + +NPMPN ?= "${@node_pkgname(d)}" + +NPM_INSTALLDIR = "${libdir}/node_modules/${NPMPN}" # function maps arch names to npm arch names def npm_oe_arch_map(target_arch, d): @@ -13,7 +21,8 @@ def npm_oe_arch_map(target_arch, d): elif re.match('arm64$', target_arch): return 'arm' return target_arch -NPM_ARCH ?= "${@npm_oe_arch_map(d.getVar('TARGET_ARCH', True), d)}" +NPM_ARCH ?= "${@npm_oe_arch_map(d.getVar('TARGET_ARCH'), d)}" +NPM_INSTALL_DEV ?= "0" npm_do_compile() { # Copy in any additionally fetched modules @@ -23,27 +32,45 @@ npm_do_compile() { # changing the home directory to the working directory, the .npmrc will # be created in this directory export HOME=${WORKDIR} - npm config set dev false + if [ "${NPM_INSTALL_DEV}" = "1" ]; then + npm config set dev true + else + npm config set dev false + fi npm set cache ${WORKDIR}/npm_cache # clear cache before every build - npm cache clear + npm cache clear --force # Install pkg into ${S} without going to the registry - npm --arch=${NPM_ARCH} --target_arch=${NPM_ARCH} --production --no-registry install + if [ "${NPM_INSTALL_DEV}" = "1" ]; then + npm --arch=${NPM_ARCH} --target_arch=${NPM_ARCH} --no-registry install + else + npm --arch=${NPM_ARCH} --target_arch=${NPM_ARCH} --production --no-registry install + fi } npm_do_install() { - mkdir -p ${NPM_INSTALLDIR}/ - cp -a ${S}/* ${NPM_INSTALLDIR}/ --no-preserve=ownership + # changing the home directory to the working directory, the .npmrc will + # be created in this directory + export HOME=${WORKDIR} + mkdir -p ${D}${libdir}/node_modules + local NPM_PACKFILE=$(npm pack .) + npm install --prefix ${D}${prefix} -g --arch=${NPM_ARCH} --target_arch=${NPM_ARCH} --production --no-registry ${NPM_PACKFILE} + ln -fs node_modules ${D}${libdir}/node + find ${D}${NPM_INSTALLDIR} -type f \( -name "*.a" -o -name "*.d" -o -name "*.o" \) -delete + if [ -d ${D}${prefix}/etc ] ; then + # This will be empty + rmdir ${D}${prefix}/etc + fi } python populate_packages_prepend () { - instdir = d.expand('${D}${libdir}/node_modules/${PN}') + instdir = d.expand('${D}${NPM_INSTALLDIR}') extrapackages = oe.package.npm_split_package_dirs(instdir) pkgnames = extrapackages.keys() d.prependVar('PACKAGES', '%s ' % ' '.join(pkgnames)) for pkgname in pkgnames: pkgrelpath, pdata = extrapackages[pkgname] - pkgpath = '${libdir}/node_modules/${PN}/' + pkgrelpath + pkgpath = '${NPM_INSTALLDIR}/' + pkgrelpath # package names can't have underscores but npm packages sometimes use them oe_pkg_name = pkgname.replace('_', '-') expanded_pkgname = d.expand(oe_pkg_name) @@ -55,11 +82,13 @@ python populate_packages_prepend () { description = pdata.get('description', None) if description: d.setVar('SUMMARY_%s' % expanded_pkgname, description.replace(u"\u2018", "'").replace(u"\u2019", "'")) - d.appendVar('RDEPENDS_%s' % d.getVar('PN', True), ' %s' % ' '.join(pkgnames).replace('_', '-')) + d.appendVar('RDEPENDS_%s' % d.getVar('PN'), ' %s' % ' '.join(pkgnames).replace('_', '-')) } FILES_${PN} += " \ - ${libdir}/node_modules/${PN} \ + ${bindir} \ + ${libdir}/node \ + ${NPM_INSTALLDIR} \ " EXPORT_FUNCTIONS do_compile do_install |