Laravel Mix多个入口点生成一个manifest.js

Chr*_*ris 7 php laravel laravel-mix

我目前在我的Mix文件中尝试使用多个入口点时遇到问题.

// Mix frontend resources.
mix.js('resources/assets/js/app.js', 'public/js')
    .extract([
        'jquery', 'bootstrap', 'aos', 'lity',
    ]);

...

// Mix app resources.
mix.js('resources/assets/app/js/app.js', 'public/app/js');
Run Code Online (Sandbox Code Playgroud)

我的Mix文件中有三个入口点.一个用于前端,后端和我的"公共应用"文件.上面的代码将我的前端vendor.jsmanifest.js文件存储public/app/js在里面public/js.

当我然后尝试参考

<script src="{{ mix('js/manifest.js') }}"></script>
<script src="{{ mix('app/js/app.js') }}"></script>
Run Code Online (Sandbox Code Playgroud)

它抛出webpack错误:

Uncaught TypeError: Cannot read property 'call' of undefined
    at __webpack_require__ (manifest.js?id=09ecc9b…:55)
    at Object../node_modules/vue/dist/vue.common.js (app.js?id=6431fd7…:sourcemap:28709)
    at __webpack_require__ (manifest.js?id=09ecc9b…:55)
    at Object../resources/assets/app/js/app.js (app.js?id=6431fd7…:sourcemap:37900)
    at __webpack_require__ (manifest.js?id=09ecc9b…:55)
    at Object.0 (app.js?id=6431fd7…:sourcemap:38015)
    at __webpack_require__ (manifest.js?id=09ecc9b…:55)
    at webpackJsonpCallback (manifest.js?id=09ecc9b…:26)
    at app.js?id=6431fd7…:sourcemap:1
Run Code Online (Sandbox Code Playgroud)

目前有一种方法可以在Mix文件中使用多个入口点吗?

Chr*_*ris 24

为了创建后端和前端的混合文件(如果需要,还有其他入口点),请调整package.json:

"scripts": {
    "dev": "npm run development",
    "development": "cross-env process.env.section=website NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch": "cross-env process.env.section=website NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "prod": "npm run production",
    "production": "cross-env process.env.section=website NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "admin-dev": "npm run admin-development",
    "admin-development": "cross-env process.env.section=admin NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "admin-watch": "cross-env process.env.section=admin NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "admin-prod": "npm run admin-production",
    "admin-production": "cross-env process.env.section=admin NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
  },
Run Code Online (Sandbox Code Playgroud)

webpack.mix.js:

let mix = require('laravel-mix');

if (process.env.section) {
  require(`${__dirname}/webpack.mix.${process.env.section}.js`);
}
Run Code Online (Sandbox Code Playgroud)

创建webpack.mix.website.js:

let { mix } = require('laravel-mix');

mix
  .setPublicPath(path.normalize('public_html/assets/website'))
  .less('resources/assets/website/less/website.less', 'css/style.css')
  .options({
    processCssUrls: false
  })
  .js('resources/assets/website/js/website.js', 'js/global.js')
;
Run Code Online (Sandbox Code Playgroud)

创建webpack.mix.admin.js:

let mix = require('laravel-mix');

mix
  .setPublicPath(path.normalize('public_html/assets/admin'))
  .options({
    processCssUrls: false
  })
  .js('resources/assets/admin/js/admin.js', 'js/global.js')
  .less('resources/assets/admin/less/admin.less', 'css/style.css')
;
Run Code Online (Sandbox Code Playgroud)

这是目前为不同目录级别的多个入口点创建多个清单文件等的唯一方法.

  • 谢谢,您保存了我的一天;) (2认同)
  • 在Laravel 5.5中实现了这一点。管理员和网站编译均可以,但是它将覆盖manifest.json文件。有人注意到这个问题吗?关于其背后的原因有什么建议吗? (2认同)
  • 您可以使用https://github.com/kabbouchi/laravel-mix-merge-manifest合并清单文件 (2认同)