免责声明:我是Jsonix和Jsonix Schema Compiler的作者,我试图找出Jsonix架构编译器应该在NPM中集成的规范方式{ {1}}。
jsonix-schema-compiler
NPM包提供了一个基于Java的代码生成工具。如果将package.json
安装为依赖项,则可以使用它来生成XML< - > JS映射。调用类似于:
jsonix-schema-compiler
这会生成一个像java -jar node_modules/jsonix-schema-compiler/lib/jsonix-schema-compiler-full.jar
schema.xsd
这样的JavaScript文件,它基本上是模块代码的一部分。
理想情况下,应在模块构建期间执行Mappings.js
之上的jsonix-schema-compiler
调用(等等)。但是必须在安装模块依赖项后执行(否则java -jar ...
将丢失)。
我的问题是 - 我应该在NPM包中以规范方式配置代码生成?
现在我在node_modules/jsonix-schema-compiler
脚本中执行此操作,例如:
postinstall
但请阅读this:
tl; Dr Don不使用安装。使用.gyp文件进行编译,以及 预先发布其他任何内容。
您几乎不必明确设置预安装或安装 脚本。如果你这样做,请考虑是否有另一个 选项。
如果{
...
"dependencies": {
"jsonix": "x.x.x",
"jsonix-schema-compiler": "x.x.x"
},
"devDependencies" : {
"nodeunit" : "~0.8.6"
},
"scripts": {
"postinstall" : "java -jar node_modules/jsonix-schema-compiler/lib/jsonix-schema-compiler-full.jar schema.xsd",
"test": "nodeunit src/test/javascript/tests.js"
}
}
也没问题我现在感到困惑。
我想要做的就是能够在安装依赖项之后但在其他事情之前(如测试或发布)执行某个命令行命令。我该如何规范呢?
答案 0 :(得分:1)
通常人们会运行诸如coffeescript-to-javascript编译器,Ecmascript 6-> 5转发器和minifiers作为构建步骤,这听起来就像你正在做的那样。
预发布和安装后之间的区别在于,预发布脚本可能会在您的签出目录中运行,因此可以合理地假设java
可用且各种开发人员依赖是可用的;安装后的脚本将在每次安装后运行,如果java(等)不可用则会失败,就像在极简主义的docker镜像上一样。所以你应该把你的构建步骤放在一个preublish或类似的脚本中。
我个人喜欢在package.json中定义脚本'mypublish',确保所有测试都通过,运行构建,确保构建工件存在,然后运行npm publish
。我发现这比prepublish
更直观,它被用作“我即将发布”的钩子,而不是“在发布之前做构建”。
这是一个使用此设置的package.json:https://github.com/reid/node-jslint/blob/master/package.json这里是带有prepublish
目标的Makefile:https://github.com/reid/node-jslint/blob/master/Makefile
如果您有更多问题,请告诉我。我有点漫无目的,因为有许多合法的方法可以完成它 - 只要你避免使用postinstall
脚本。 ;-)