loader与plugin的区别

  • loader是加载器,plugin是插件
  • loader主要用来加载一个一个的文件,比如可以加载js文件,把js转译成低版本浏览器支持的js,也可以加载css文件,把css加载成页面上的style标签,也可以加载图片文件,对图片进行优化
  • plugin用来加强webpack功能,比如有个插件叫HtmlWebpackPlugin,用来生成一个html文件,还有miniCssExtractPlugin,用来抽取css的代码生成一个css文件

    引入SCSS

    node-sass已经过时,改用dart-sass
    css文件后缀改成.scss就是合法的scss文件, 用$声明变量
    搜索:webpack scss loader

安装

  1. yarn add sass-loader dart-sass --dev

添加配置

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.s[ac]ss$/i,
  6. use: [
  7. 'style-loader',
  8. 'css-loader',
  9. {
  10. loader: 'sass-loader',
  11. options: {
  12. // Prefer `dart-sass`
  13. implementation: require('dart-sass'),
  14. },
  15. },
  16. ],
  17. },
  18. ],
  19. },
  20. };

引入less

将css后缀改为less
语法用@声明变量

  1. @color: red;
  2. body {
  3. background: @color;
  4. }

安装

  1. yarn add less-loader less --dev

添加配置

  1. module.exports = {
  2. ...
  3. module: {
  4. rules: [{
  5. test: /\.less$/,
  6. use: [{
  7. loader: "style-loader" // creates style nodes from JS strings
  8. }, {
  9. loader: "css-loader" // translates CSS into CommonJS
  10. }, {
  11. loader: "less-loader" // compiles Less to CSS
  12. }]
  13. }]
  14. }
  15. };

或者

  1. module.exports = {
  2. ...
  3. module: {
  4. rules: [{
  5. test: /\.less$/,
  6. loader: ["style-loader","css-loader","less-loader"]
  7. }]
  8. }
  9. };

引入stylus

后缀为.styl

  1. c = red;
  2. body {
  3. background: c;
  4. }

安装

  1. yarn add stylus-loader stylus --dev

配置

  1. {
  2. test: /\.styl$/,
  3. loader: ["style-loader","css-loader","stylus-loader"]
  4. }

file-loader引入图片

安装

  1. yarn add file-loader --dev

添加配置

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.(png|jpg|gif)$/,
  6. use: [
  7. {
  8. loader: 'file-loader',
  9. options: {}
  10. }
  11. ]
  12. }
  13. ]
  14. }
  15. }

js导入图片

  1. import png from './1.png' // 将文件导入成路径
  2. const div = document.getElementById('app')
  3. div.innerHTML = `
  4. <img src="${png}">
  5. `

懒加载

不得不加载时才加载(按需加载)
新建一个lazy.js文件

  1. export default function lasy(){
  2. console.log("我是一个懒加载模块")
  3. }

在另一个js文件里使用懒加载
懒加载会得到一个promise,成功时执行什么,失败时执行什么

  1. const button = document.createElement('button')
  2. button.innerText = '懒加载'
  3. button.onclick = ()=>{
  4. const promise = import('./lazy.js')
  5. promise.then((module)=>{
  6. const fn = module.default
  7. fn()
  8. },()=>{})
  9. }
  10. div.appendChild(button)

上传到github

先yarn build
把源代码上传到master分支,排除dist和node_module文件夹

新建gh-pages分支

  1. git branch gh-pages

切换到gh-pages分支

  1. git checkout gh-pages

删除文件,只留下dist, node_module,.gitignore
将dist文件夹里的文件移到根目录

  1. mv dist/* ./

提交到github: gst ga . gc gp报错

  1. git push --set-upstream origin gh-pages

到github设置github pages

用脚本一键上传

返回master分支

  1. git checkout master

新建deploy.sh

  1. yarn build &&
  2. git checkout gh-pages &&
  3. rm -rf *.html *.js *.css *.png &&
  4. mv dist/* ./ &&
  5. rm -rf dist;
  6. git add . &&
  7. git commit -m "update" &&
  8. git push &&
  9. git checkout - # 回到上一个分支

在master执行

  1. sh ./deploy.sh

上传到gitee

新建origin

  1. git remote add gitee git@gitee.com:XG_GX/webpack-demo.git # 把origin改成了gitee

查看源

  1. git remote -v

将gh-pages分支上传到gitee的master

  1. git push gitee gh-pages:master