const path = require("path"); const mix = require("laravel-mix"); require("laravel-mix-artisan-publish"); require("laravel-mix-polyfill"); require("laravel-mix-clean"); require("laravel-mix-eslint"); require("laravel-mix-stylelint"); const assetDir = "build/assets"; const polyfill = { enabled: true, bugfixes: true, useBuiltIns: "usage", targets: "last 3 version, not dead, >0.3%", }; mix.webpackConfig({ resolve: { extensions: ["*",".js", ".vue", ".ts"], alias: { "@Theme": path.resolve(`resources/theme/assets`), "@": path.resolve("resources/assets"), vue$: "vue/dist/vue.runtime.esm-bundler.js", }, }, module: { rules: [ { test: /\.ts$/, loader: "ts-loader", options: { appendTsSuffixTo: [/\.vue$/], }, }, { test: /\.vue$/, loader: "vue-loader", options: { esModule: true, comment: true }, }, ], }, // Pour debug compilation errors // stats: { // children: true, // warningsFilter: [/\-\-underline\-color/], // }, }); mix.options({ fileLoaderDirs: { fonts: `${assetDir}/fonts`, images: `${assetDir}/images`, }, postCss: [ require("postcss-discard-comments")({ removeAll: true, }), ], }); mix.clean({ cleanOnceBeforeBuildPatterns: [ "vendor/*", "build/*" ], }); // * COMMON mix.vue({ runtimeOnly: true, extractStyles: "build/css/v-extract.css", globalStyles: false, }) .eslint({ fix: true, extensions: ["js", "ts"], }) .stylelint({ configFile: ".stylelintrc.json", files: ["**/*.scss"], }) .polyfill(polyfill) .version() .sourceMaps(false, "inline-source-map") // * FRONT compilation .ts("resources/theme/ts/app.ts", "public/build/theme/js", { transpileOnly: true }) .sass("resources/theme/sass/app.scss", "public/build/theme/css") // * BACK Engine compilation .ts("resources/ts/app.ts", "public/build/back/js", { transpileOnly: true }) .sass("resources/sass/app.scss", "public/build/back/css"); mix.publish({ provider: "Alexusmai\\LaravelFileManager\\FileManagerServiceProvider", tag: "fm-assets", path: "artisan", force: true, }); // ! Écrasement possible des resources back par front. // * Copy BACK resources mix.copyDirectory("resources/assets/images", `public/build/assets/images`) .copyDirectory("resources/assets/fonts", `public/build/assets/fonts`); // * Copy FRONT resources mix.copyDirectory("resources/theme/assets/images", `public/build/assets/images`) .copyDirectory("resources/theme/assets/fonts", `public/build/assets/fonts`);