我认为这个问题适用于其他框架,这些框架有一些依赖于特定构建工具(使用JSX的React组件等)的插件/组件生态系统。 Vue只是我的用例。
我以单.vue
个文件的形式创作了几个Vue组件,这些文件发布到NPM。这些组件的package.json
没有列出任何依赖项,因为它们本身旨在在使用webpack,vue-loader,sass-loader等的父项目中运行。This is an example of one such component。
我不确定声明这些组件依赖于具有所述构建工具的父包的最佳方式。我不相信devDependencies
是他们的正确位置,因为组件本身没有依赖于这些的开发步骤。 peerDependencies
似乎更合适,但我并不相信这与我想要实现的目标完全匹配。
查看awesome-vue存储库中的许多组件,我看不到peerDependencies
的使用情况和devDependencies
似乎与特定组件本身的开发相关。
创作这些组件的正确方法是什么?这几乎就像我需要像#34; peerDevDependencies
"。
答案 0 :(得分:1)
遗憾的是,大多数组件已经编译好了。
在我看来,分发组件的最佳方法是将main
写入组件的原始.vue
文件。
您不应指定使用任何特定工具,选择您的软件包的开发人员应该可以自由使用他们想要的工具,无论是Browserify还是Rollup(或Webpack)。原始.vue
格式允许他们使用他们想要的任何工具编译.vue
组件并使用他们想要的任何Vue版本(当然在一定范围内)。
此外,我喜欢的是让用户可以直接使用该组件,即使在浏览器中也是如此,只有Vue作为<script>
依赖项。为此你必须编译它,是的,在页面中需要它的意义上指定Vue
作为peerDependency
。
您可以将元信息放在package.json
中告诉CDN在浏览器内部获取已编译的版本,这非常方便,因此用户只需指定包的名称而无需担心文件名或版本
答案 1 :(得分:0)
仅作为Vue.js组件的使用者,我认为将构建依赖关系指定为peerDependencies
是最佳解决方案。您使用的是非常标准的构建管道,但我认为指定它们非常重要。这些不是严格的devDependencies或依赖项,具体取决于最终用户将在何处编译。
答案 2 :(得分:-1)
我建议您在"module"
上使用package.json
属性作为原始vue文件,将"main"
作为编译文件使用module
。 [^xyz]
是一个标准化的属性,webpack和汇总已经理解了它。
有关详细信息,请参阅s etting up multiplatform npm packages article。