问题描述
如何构造一个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
在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
从已发布的软件包中排除源文件,以节省空间。