Laravel:"dependencies" 和 "devDependencies" 中应该有哪些 npm 包?

Laravel: Which npm packages should be in "dependencies" vs "devDependencies"?

在 Laravel 5.3 中,package.json 文件如下所示:所有包都在 devDependencies 中。有人可以告诉我生产中也需要哪些包吗?我想除了browsersync.

package.json

{
  "private": true,
  "scripts": {
    "prod": "gulp --production",
    "dev": "gulp watch"
  },
  "devDependencies": {
    "gulp": "^3.9.1", 
    "jquery": "^3.1.0",
    "laravel-elixir": "^6.0.0-9",
    "laravel-elixir-browsersync-official": "^1.0.0",
    "laravel-elixir-vue-2": "^0.2.0",
    "laravel-elixir-webpack-official": "^1.0.2",
    "lodash": "^4.16.2",
    "vue": "^2.0.1",
    "vue-resource": "^1.0.3"
  },
  "dependencies": {
    "dropzone": "^4.3.0"
  }
}

我认为在生产模式下也需要像 vue.js 这样的包,所以我会将它们移至依赖项而不是 devDependencies。

如果您使用 elixir,则所有这些都是 devDependencies

首先,您在生产中不需要 elixir,因为它只是 gulp 的包装器,希望您能在开发机器上编译您的资产并上传它们。

所有其他 npm javascript 库都可以用 elixir 编译,因此不需要在生产机器上安装它们。默认情况下 elixir 使用 webpackresources\assets\js\app.js 编译成 public\js\app.js,您需要将其作为 script 包含在您的网页中。

如果您看一下:resources\assets\js\bootstrap.js,您会看到 laravel 默认添加的包(例如 vuebootstrapjQuery), 因此,例如,如果您想将 dropzone 添加到您的项目中,您只需将其添加到 bootstrap.js 中,如下所示:

require('dropzone');

现在可以将 dropzone 编译为 public\js\app.js,从而使 dropzone 也成为 devDependency

此外,在使用 Laravel Mix(它是 Webpack 的包装器)的较新版本的 Laravel 中,您的所有依赖项都可以在 devDependencies.

Webpack 将所有内容编译成单个文件 (/js/app.js) 或多个文件,例如,如果您使用 extract 方法构建文件 (/js/app.js, /js/app.js, /js/manifest.js).这些是您的浏览器执行 JavaScript 代码所需的唯一文件;对于 Webpack 构建它们来说,找到 devDependencies.

下的所有依赖项就足够了