webpack.mix.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. const mix = require('laravel-mix');
  2. const exec = require('child_process').exec;
  3. require('dotenv').config();
  4. /*
  5. |--------------------------------------------------------------------------
  6. | Mix Asset Management
  7. |--------------------------------------------------------------------------
  8. |
  9. | Mix provides a clean, fluent API for defining some Webpack build steps
  10. | for your Laravel application. By default, we are compiling the Sass
  11. | file for the application as well as bundling up all the JS files.
  12. |
  13. */
  14. const glob = require('glob')
  15. const path = require('path')
  16. let distPath = mix.inProduction() ? 'resources/dist' : 'resources/pre-dist';
  17. /*
  18. |--------------------------------------------------------------------------
  19. | Vendor assets
  20. |--------------------------------------------------------------------------
  21. */
  22. function mixAssetsDir(query, cb) {
  23. (glob.sync('resources/assets/' + query) || []).forEach(f => {
  24. f = f.replace(/[\\\/]+/g, '/');
  25. cb(f, f.replace('resources/assets', distPath));
  26. });
  27. }
  28. const sassOptions = {
  29. precision: 5
  30. };
  31. // plugins Core stylesheets
  32. mixAssetsDir('sass/plugins/**/!(_)*.scss', (src, dest) => mix.sass(src, dest.replace(/(\\|\/)sass(\\|\/)/, '$1css$2').replace(/\.scss$/, '.css'), sassOptions));
  33. // themes Core stylesheets
  34. mixAssetsDir('sass/themes/**/!(_)*.scss', (src, dest) => mix.sass(src, dest.replace(/(\\|\/)sass(\\|\/)/, '$1css$2').replace(/\.scss$/, '.css'), sassOptions));
  35. // pages Core stylesheets
  36. mixAssetsDir('sass/pages/**/!(_)*.scss', (src, dest) => mix.sass(src, dest.replace(/(\\|\/)sass(\\|\/)/, '$1css$2').replace(/\.scss$/, '.css'), sassOptions));
  37. // Core stylesheets
  38. mixAssetsDir('sass/core/**/!(_)*.scss', (src, dest) => mix.sass(src, dest.replace(/(\\|\/)sass(\\|\/)/, '$1css$2').replace(/\.scss$/, '.css'), sassOptions));
  39. // script js
  40. mixAssetsDir('js/scripts/**/*.js', (src, dest) => mix.scripts(src, dest));
  41. /*
  42. |--------------------------------------------------------------------------
  43. | Application assets
  44. |--------------------------------------------------------------------------
  45. */
  46. mixAssetsDir('assets/vendors/js/**/*.js', (src, dest) => mix.scripts(src, dest));
  47. mixAssetsDir('assets/vendors/css/**/*.css', (src, dest) => mix.copy(src, dest));
  48. mixAssetsDir('assets/vendors/css/editors/quill/fonts/', (src, dest) => mix.copy(src, dest));
  49. mix.copyDirectory('resources/assets/images', distPath + '/images');
  50. mix.copyDirectory('resources/assets/fonts', distPath + '/fonts');
  51. mix.copyDirectory('resources/assets/vendors', distPath + '/vendors');
  52. // ------------------------------------ Dcat Admin -------------------------------------------
  53. function dcatPath(path) {
  54. return 'resources/assets/dcat/' + path;
  55. }
  56. function dcatDistPath(path) {
  57. return distPath + '/dcat/' + path;
  58. }
  59. // 复制第三方插件文件夹
  60. mix.copyDirectory(dcatPath('plugins'), dcatDistPath('plugins'));
  61. // 打包app.js
  62. mix.js(dcatPath('js/dcat-app.js'), dcatDistPath('js/dcat-app.js'));
  63. // 打包app.scss
  64. mix.sass(dcatPath('sass/dcat-app.scss'), dcatDistPath('css/dcat-app.css'));
  65. // 打包所有 extra 里面的所有js和css
  66. mixAssetsDir('dcat/extra/*.js', (src, dest) => mix.js(src, dest));
  67. mixAssetsDir('dcat/extra/*.scss', (src, dest) => mix.sass(src, dest.replace('scss', 'css')));
  68. // ------------------------------------ Dcat Admin -------------------------------------------
  69. mix.js('resources/assets/js/core/app-menu.js', distPath + '/js/core')
  70. .js('resources/assets/js/core/app.js', distPath + '/js/core')
  71. .sass('resources/assets/sass/bootstrap.scss', distPath + '/css')
  72. .sass('resources/assets/sass/bootstrap-extended.scss', distPath + '/css')
  73. .sass('resources/assets/sass/colors.scss', distPath + '/css')
  74. .sass('resources/assets/sass/components.scss', distPath + '/css')
  75. .sass('resources/assets/sass/custom-rtl.scss', distPath + '/css')
  76. .sass('resources/assets/sass/custom-laravel.scss', distPath + '/css');
  77. mix.then(() => {
  78. if (process.env.MIX_CONTENT_DIRECTION === "rtl") {
  79. let command = `node ${path.resolve('node_modules/rtlcss/bin/rtlcss.js')} -d -e ".css" ./${distPath}/css/ ./${distPath}/css/`;
  80. exec(command, function (err, stdout, stderr) {
  81. if (err !== null) {
  82. console.log(err);
  83. }
  84. });
  85. // exec(`./node_modules/rtlcss/bin/rtlcss.js -d -e ".css" ./${distPath}/css/ ./${distPath}/css/`);
  86. }
  87. });