如何构建一个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
从发布的包中排除源文件,以实际节省空间。