安装后如何使NodeJS软件包生成C ++ / WebAssembly?

问题描述

如何构造一个NodeJS程序包,其中包含已包装到Web程序集中的包装的C ++代码,以便在运行npm install <package name>时发生编译步骤?

我配置了一个软件包mypackage,以便在其项目目录中运行npm run build时,C ++代码被编译为Web程序集,然后与该程序包的其他Javascript捆绑在一起。

我现在正尝试从另一个项目中使用该软件包,如果我运行npm install --save mypackage,它将安装该软件包的Javascript,但不会运行它的构建过程,因此不会创建任何Web程序集,导致包装破损。

解决方法

您如何做

在package.json文件的scriptis部分中,您可以添加一个postinstall脚本,该脚本将在每次安装软件包后运行。您可以在https://docs.npmjs.com/misc/scripts

上找到有关npm脚本的更多信息。

在pacakge.json内部

...
"scripts": {
 ...
 "postinstall": "npm run build"
}

你应该这样做

使构建过程发生在目标(消费者)系统上的唯一有效理由是,构建是否依赖于目标系统的操作系统或体系结构,或者依赖于目标系统的某些配置/属性。如果构建不相关,则应在发布时进行构建,这样将为所有使用者完成一次构建,从而节省带宽和时间。通常,您还可以节省空间,因为捆绑的软件包少于原始软件包。

如果您决定打包构建的工件(捆绑的软件包),那么最好使用prepublish脚本

"scripts": {
 ...
 // this will make sure that you are always publishing the most updated built artifact,instead of having to manually run build each time you want to publish
 "prepublish": "npm run build" 
}

另一个好主意是也使用.npmignore从已发布的软件包中排除源文件,以节省空间。