如何使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脚本,而每次安装软件包后都会运行该脚本。你可以在这里找到更多关于npm脚本的信息https://docs.npmjs.com/misc/scripts

内部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从发布的包中排除源文件,以实际节省空间。

相关内容

  • 没有找到相关文章

最新更新