package.json 属性问题
最近用到了angular日历控件,查看package的时候有个疑问,文件中的metadat的作用是什么?这个控件代码中定义了template,但是完全没有走,dom交互部分用到的template都是json文件中的部分。很奇怪,求解释,这个metadata字段在package.json中的作用是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好问题。这个
package.json
实际是编译之后的结果,你真正看这个控件的源码的时候,它的源码的package.json
里是没有这个metadata
的,但是注意看源码中package.json
的最后几行:在这里,它暴露了它是用ng-packagr这个包来进行编译的,再查看上面的
scripts
部分:果然,它用了
ng-packagr
编译。所以npm里的package.json
文件是由ng-packagr
生成的,而不是作者手写的。那么
ng-packagr
为什么会生成这么一个metadata
呢?这就要谈到Angular
本身的编译机制。Angular
的编译分为JIT
和AOT
两种,听上去特别高大上吧?其实就是即时编译和预编译的区别。正常情况下,你ng build
得到的是即时编译也就是JIT
的结果,但如果你加个参数ng build --aot
,你就得到了AOT
也就是预编译的结果,这时候Angula
r就帮你产生了这个metadata
以及所有附加需要的文件。很显然,ng-packagr
采用了AOT
的方式进行编译,所以有了这个metadata
。至于这个
AOT
产生的这个metadata
有什么用,它的作用就是可以让用户在二次编译的时候节省时间。具体细节可以通过看咱们SegmentFault上的这篇文章来进一步了解。