Vuejs&npm-所有依赖项是否应该是devDependencies?

21
我正在为Vue.js构建一个插件组件,使用标准的webpack配置和vue-loader等工具。
在简单的库中,我把希望“require”的模块放在package.json中的dependencies中。但是由于Webpack将编译所有我的代码和依赖项到一个捆绑包中,我不确定应该把如axios这样的依赖项放在哪里。
希望有人能给予一些指导。
3个回答

25

从技术上讲,当使用类似于webpack的打包工具时,输出的结果对于你的打包流程不会有任何影响。

话虽如此,将软件包分为dependencies和devDependencies仍然有助于您(以及查看您的package.json 的其他人)了解哪些软件包应该成为创建的包的一部分(依赖项),哪些软件包仅需要用于构建包的过程(devDependencies)。


4

已有一个很好的答案解释了dependenciesdevDependencies之间的区别:https://dev59.com/VmMk5IYBdhLWcg3w5B3y#22004559

只需记住主要原则:

如果您需要在生产中使用软件包,请将其放入dependencies中(在您的情况下,最有可能应该将axios放在dependecies中)。

如果您仅在开发过程中需要软件包,请将其放入devDependencies中(例如,单元测试库不需要在生产中使用,应将其放入devDependencies中)。


7
这并没有回答问题。原帖中使用Webpack处理代码,从而生成一个用于生产的捆绑包。 - Ealhad
@Ealhad 我们可以说像sass-loadereslint这样的包不会在生产中使用,可能会在最终构建中被修剪。这更像是一种语义分类。 - HosseyNJF
1
@HosseyNJF 仍然没有回答问题。是的,这些很明显是 devDeps,但即使 Vue 本身也最终与 WebPack 捆绑在一起。因此,我认为与 Vue 相关的任何依赖项都可以成为 devDep,因为这些软件包中没有一个需要进入生产环境。但从清晰度的角度来看,这有点棘手。 - m4heshd

1
简单的答案是:是的,在上述情况下,所有前端npm依赖项都可以是“devDependencies”。只有节点生产运行时依赖项(例如,如果您正在使用“express”和与运行时服务器相关的组件)需要在“dependencies”中。
上面答案的含糊不清是因为对于这些依赖项应该在哪里存在存在哲学上的分歧。
在我的情况下 - 在一个注重安全的公司工作 - 我们要求任何与构建和开发相关但不运行生产代码的东西都被视为“devDependencies”。为什么?除了感觉将依赖项分离(至少对我来说)就是整个点/意图之外:在我的上下文中,由于它们没有在生产中使用,也没有在生产中加载或使用,通过使它们成为“devDependencies”,这些模块的风险配置文件显着降低。也许如果您在一个存储库中拥有一个组合的表达式应用程序和vue应用程序,这更加明显?如果您将这些常规依赖项,则在生产中进行npm安装时,您的表达式应用程序将具有大量额外的垃圾。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接