我应该在哪里配置NPM包中的代码生成?

时间:2014-12-25 18:47:27

标签: java node.js npm code-generation package.json

免责声明:我是JsonixJsonix 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" } } 也没问题我现在感到困惑。

我想要做的就是能够在安装依赖项之后但在其他事情之前(如测试或发布)执行某个命令行命令。我该如何规范呢?

1 个答案:

答案 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脚本。 ;-)