前端模块化

1.模块化实现的雏形

传统的js存在的问题:变量污染,js顺序改变影响其他js执行

解决方法进步历史

var ModuleA = (function(){
	var obj = {}
	obj.flag = true
	obj.myFunc = function(info){
		console.log(info)
	}
	return obj
})()

if(ModuleA.flag){
	console.log('www');
}
ModuleA.myFunc('vvvv')
console.log(ModuleA)

常见的模块化规范

CommonJS、AMD、CMD、ES6的Modules

2.CommonJS的导出和导入

  • 导出export
module.exports = {
	flag:true,
	test(a,b){
		return a + b
	}
}
  • 导入
let { test,flag } = require('导出的文件路径');
//或者
import { test,flag } from '导出的文件路径';

// 等同于
let _mA = require('导出的文件路径');
let test = _mA.test;
let flag = _mA.flag;

3.ES6的Modules

  • 导出export
// aaa.js
var flag = true;
function sum(num1,num2){
    return num1 + num2
}
if(flag){
    console.log(sum(num1,num2))
}


// 1导出方式一
export {
    sum,flag
}

// 2导出方式二
export var num1 = 1000;
export var height =1.88;

// 3导出函数/类
export function mull(num1,num2){
    return num1 * num2
}
export class Person{
    run(){
        console.log('在奔跑')
    }
}

// 4默认导出(一个模块(js文件),只能有一个export default)
export default
export default function(){
    console.log('export default ')
}
  • 导入import
// 1导入{}中定义的变量
import {flag,sum} from './aaa.js';
if(flag){
   console.log(sum(20,30))
}

// 2直接导入export定义的变量
import {num1,height} from './aaa.js';
console.log(num1,height)

// 3导入export的function
import {mull,person} from './aaa.js';
mull(30,50)

const p = new Person();
p.run()  //在奔跑

// 4默认导入
import myownFun from './aaa.js';

// 5全部导入
import * as aaaname from './aaa.js'
console.log(aaaname.flag)  //true

*某些情况下,一个模块包含某个功能,我们不希望给这个功能命名,而是让导入者可以自己命名,这时候就可以使用export default

4.webpack概念和安装

概念:模块化,打包

webpack运行必须依赖node环境,node为了正常执行很多代码,需要依赖各种包,npm就是包管理工具。

全局安装

npm install webpack -g

局部安装

cd 对于目录
npm install webpack --save-dev

为什么全局安装后,还要局部安装呢

  • 在终端执行webpack命令。使用的全局安装的webpack
  • 当在package.json中定义了scripts时,其中包含了webpack命令,那么使用的就是局部的webpack

目录结构

 

5.webpack.config.js和package.json配置

  • webpack.config.js
// 从node里导入path包(需要先安装依赖)
const path = request('path')

module.exports = {
	entry:'./src/main.js',
	output:{
		path:'path.resolve(_dirname,'dist')',
		filename:'bundle.js'
	}
}
  • package.json
    {
      "name": "admin",
      "version": "0.1.0",
      "private": true,
        //npm run vue-cli-service serve === npm run serve
      "scripts": {
        "serve": "vue-cli-service serve",
        "build": "vue-cli-service build",
        "lint": "vue-cli-service lint"
      },
      "dependencies": {
        "core-js": "^3.8.3",
        "element-ui": "^2.15.9",
        "particles.js": "^2.0.0",
        "vue": "^2.6.14",
        "vue-router": "^3.5.1"
      },
      "devDependencies": {
        "@babel/core": "^7.12.16",
        "@babel/eslint-parser": "^7.12.16",
        "@vue/cli-plugin-babel": "~5.0.0",
        "@vue/cli-plugin-eslint": "~5.0.0",
        "@vue/cli-plugin-router": "~5.0.0",
        "@vue/cli-service": "~5.0.0",
        "axios": "^0.27.2",
        "eslint": "^7.32.0",
        "eslint-plugin-vue": "^8.0.3",
        "vue-particles": "^1.0.9",
        "vue-template-compiler": "^2.6.14"
      },
     
    }

    npm run vue-cli-service serve(使用的全局的webpack) === npm run serve(优先用本地webpack,找不到再去用全局)

6.css文件配置

  • css-loader、style-loader安装和配置

        css-loader将css文件进行加载,style-loader将模块导出,作为样式添加的dom中

npm install --save-dev css-loader
npm install style-loader --save-dev

// webpack.config.js
// 从node里导入path包(需要先安装依赖)
const path = request('path')

module.exports = {
	entry:'./src/main.js',
	output:{
		path:'path.resolve(_dirname,'dist')',
		filename:'bundle.js'
	},
    
    module: {
        rules: [
          {
            test: /\.css$/,
            //webpack在读取使用loader时候,从右向左    
            use: [ 'style-loader', 'css-loader' ]
          }
        ]
    }

}
  • 引入css 
// main.js
require('./css/normal.css')

6.less文件处理

  • 安装和配置
npm install --save-dev less-loader less

// webpack.config.js
// 从node里导入path包(需要先安装依赖)
const path = request('path')

module.exports = {
	entry:'./src/main.js',
	output:{
		path:'path.resolve(_dirname,'dist')',
		filename:'bundle.js'
	},
    
    module: {
        rules: [
          {
            test: /\.css$/,
            //webpack在读取使用loader时候,从右向左    
            use: [ 'style-loader', 'css-loader' ]
          },{
            loader: "style-loader" // creates style nodes from JS strings
          }, {
            loader: "css-loader" // translates CSS into CommonJS
          }, {
            loader: "less-loader" // compiles Less to CSS
          }
        ]
    }

}

6.图片文件处理

npm install --save-dev url-loader

// webpack.config.js
// 从node里导入path包(需要先安装依赖)
const path = request('path')

module.exports = {
	entry:'./src/main.js',
	output:{
		path:'path.resolve(_dirname,'dist')',
		filename:'bundle.js',
        // 为所有url的自动拼接dist/
        publiPath:'dist/'
	},
    
    module: {
        rules: [
          {
            test: /\.css$/,
            //webpack在读取使用loader时候,从右向左    
            use: [ 'style-loader', 'css-loader' ]
          },{
            loader: "style-loader" // creates style nodes from JS strings
          }, {
            loader: "css-loader" // translates CSS into CommonJS
          }, {
            loader: "less-loader" // compiles Less to CSS
          },{
            test: /\.(png|jpg|gif)$/,
            use: [
              {
                loader: 'url-loader',
                options: {
                  limit: 8192,
                  // 自定义img路径  
                  // img:要打包到的文件夹
                  // name:获取图片原来的名字
                  // hash:8防止图片每次冲突,使用hash
                  // ext:使用图片原来的扩展名
                  name:'img/[name].[hash:8].[ext]'  
                }
              }
            ]
          }
        ]
    }

}

加载图片>limit  将图片变异成base64字符串形式

 加载图片<limit 需要使用file-loader模块进行加载

7.es6转es5

npm install babel-loader babel-core babel-preset-env webpack

module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /(node_modules|bower_components)/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env']
        }
      }
    }
  ]
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值