cross-env
,laravel-mix可独立成派勿需强制与laravel一起export NODE_ENV=production webpack
mix安装
npm init -y
npm install laravel-mix --save-dev
cp node_modules/laravel-mix/setup/webpack.mix.js ./
构建webpack.min.js
mkdir src && touch src/app.{js,scss}
生成项目目录"make": "webpack --config=node_modules/laravel-mix/setup/webpack.config.js"
配置npm run make
编译或相关命令自动监听编译
mix.js(src | [src], output)
react,coffee
,使用时需安装不同的loader,比如vue-loader
mix.react(src, output)
mix.preact(src, output)
mix.coffee(src, output)
文件切割
mix.js(src, output).extract(['any', 'vendor', 'library'])
Manifest
文件
浏览器同步刷新
mix.browserSync('my-site.test')
npm run watch
运行开发模式服务器热模块替换
npm run hot
会启动一个 Node 服务器并且监听bundle 文件文件版本化
mix.js('src', 'output').version([])
Laravel Mix
所生成的 manifest.json
文件(格式文件名 :版本化名字,每次编译的时候,版本化名字都会改变)mix.version(['public/js/random.js'])
部分版本化public/js/random.js?{hash}
附加查询字符串css 预处理器
mix.sass('src', 'output', pluginOptions);
mix.standaloneSass('src', 'output', pluginOptions); // 与 Webpack 构建隔离。
mix.less('src', 'output', pluginOptions);
mix.stylus('src', 'output', pluginOptions);
mix.postCss('src', 'output', [require('precss')()]);
插件选项
编译时, Laravel Mix 的首先是去分别的调用 Node-Sass, Less,和 Slylus 来编译Sass, Less 文件
mix.sass('src', 'destination', { outputStyle: 'nested' })
Stylus 插件
// 安装额外插件
mix.stylus('resources/assets/stylus/app.styl', 'public/css', {
use: [require('rupture')()]
});
CSS 中的url重写
mix.sass('src/app.scss', 'dist/').options({
processCssUrls: false
});
PostCss插件
复制文件
mix.copy(from, to);
mix.copy('from/regex/**/*.txt', to);
mix.copy([path1, path2], to);
mix.copyDirectory(fromDir, toDir);
关闭系统提醒
mix.js(src, output).disableNotifications()
拼接与压缩
mix.combine(['one.js', 'two.js'], 'merged.js')
mix.babel(['one.js', 'two.js'], 'merged.js')
mix.minify('path/to/file.js')
压缩单个文件mix.minify(['this/one.js', 'and/this/one.js'])
多个自动加载
作用:模块可以作为变量配置在 webpack 当中然后进行自动加载
适用场景
示例
// 指定 webpack将var $ = require('jquery') 添加到全局变量 $ 标识符或 window.jQuery 被使用的每个位置
mix.autoload({
jquery: ['$', 'window.jQuery']
});
事件钩子
Webpack 配置信息
语法 mix.webpackConfig({} || cb)
配置对象
webpack.config.js
在项目根目录中是不会生效webpack.mix.js
文件会修改或覆盖默认设置,Mix 将会进行深度合并使用回调
mix.webpackConfig(webpack => {
return {
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery'
})
]
};
});
mix.extend(string,func | class)
webpack-livereload-plugin
<script src="http://localhost:35729/livereload.js"></script>
npm run watch
用于渲染常用组件的函数库,如datepickers , draggables
等等
使用流程
// resources/assets/js/app.js
import $ from 'jquery';
window.$ = window.jQuery = $;
import 'jquery-ui/ui/widgets/datepicker.js';
// resources/assets/sass/app.scss
@import '~jquery-ui/themes/base/all.css';
// resources/assets/js/app.js
$('#datepicker').datepicker();
mix.options({
extractVueStyles: false,
processCssUrls: true,
terser: {},
purifyCss: false,
//purifyCss: {},
postCss: [require('autoprefixer')],
clearConsole: false
});