前端模块化的基本使用

1. es6模块化

(1)语法

默认导出语法: export default (每个模块中只允许使用唯一的一次export default

默认导入语法: import ... from ...

(2)按需导入与按需导出

按需导出: export  let s1 = 10

按需导入: import  { s1 }  from ‘模块标识符’

(3)直接导入并执行模块

导入语法:import 'aa.js'

2. webpack模块化

(1)创建项目步骤

① 新建空白目录,并运行 npm init -y 命令,初始化包管理配置工具 package.json

② 新建 src 源代码目录

③ 新建 src -> index.html首页

④ 初始化首页基本结构

(2)安装和配置webpack

① 运行 npm install webpack webpack-cli -D 命令,安装 webpack 相关的包

② 在项目根目录中,创建名为 webpack.config.js 的 webpack 配置文件

③  webpack 的配置文件中,初始化如下基本配置:

module.exports = {

  //编译模式

  mode: 'development', // 用来指定构建模式,开发阶段用 development  上线阶段用 production

}

 

④  package.json 配置文件中的 scripts 节点下,新增 dev 脚本如下:

"scripts": {

    "test": "echo \"Error: no test specified\" && exit 1",

    "build": "webpack", //打包命令

  },

 

⑤ 在终端运行 npm run build 命令,启动 webpack 进行项目打包。

(3) 配置打包的入口与出口

① webpack 4.x版本中默认约定:

打包的入口文件 src  -> index.js

打包的输出文件 dist  -> main.js

② 如果要修改打包的入口与出口,可在 webpack.config.js 中新增如下配置信息:

const path = require('path') //导入node.js 中专门操作路径的模块

module.exports = {

  entry: path.join(__dirname,'./src/index.js'), //打包入口文件的路径

  output: {

    path: path.join(__dirname, './dist'), //输出文件的存放路径

    filename: 'bundle.js' //输出文件的名称

  },

 

(4) 配置 webpack 的自动打包功能

① 运行npm install webpack-dev-server -D 命令,安装支持项目自动打包的工具

② 修改package.json -> scripts 中的 dev 命令如下:

"scripts": {

    "dev": "webpack-dev-server" // script 节点下的脚本,可以通过 npm run 执行

  }

 

③ src -> index.html 中,script 脚本的引用路径,修改为 “/buldle.js”

④ 运行 npm run dev 命令,重新进行打包

⑤ 在浏览器中访问 http://localhost:8080 地址,查看自动打包效果

注意:

webpack-dev-server 会启动一个实时打包的 http 服务器

webpack-dev-server 打包生成的输出文件,默认放到了项目根目录中,而且是虚拟的

 

(5) 配置html-webpack-plugin 生成预览页面

① 运行 npm install html-webpack-plugin -D 命令,安装生成预览页面的插件

② 修改 webpack.config.js 文件头部区域,添加如下配置信息

const HtmlWebpackPlugin = require('html-webpack-plugin')

const htmlPlugin = new HtmlWebpackPlugin({ //创建插件的实例对象

  template: './src/index.html', //指定要用到的模板文件

  filename: 'index.html' //指定生成的文件名称,该文件存在于内存中,在目录中不显示

})

 

③ 修改 webpack.config.js 文件中向外暴露的配置对象,新增如下配置点:

module.exports = {

  ....

  plugins: [htmlPlugin] // plugins 数组是 webpack 打包期间会用到的一些插件列表

}

 

(6)配置自动打包相关的参数

// package.json中的配置

// --open 打包完成后自动打开浏览器页面

// --host 配置 IP 地址

// --port 配置端口

"scripts": {

    "test": "echo \"Error: no test specified\" && exit 1",

    "build": "webpack",

    "dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"

  }

 

3. webpack中的加载器

(1)通过loader 打包非 js 模块

在实际开发过程中,webpack 默认只能打包处理 .js后缀名结尾的模块,其他非 .js后缀名结尾的模块,需要调用 loader 加载器才可以正常打包,否则会报错!

loader 加载器可以辅助 webpack 打包处理特定的文件模块,比如:

1) less-loader可以打包处理 .less 相关文件

2) sass-loader可以打包处理 .scss相关文件

3) url-loader 可以处理css中与url路径相关的文件

 

(2)打包处理css文件

① 运行 npm i style-loader css-loader -D命令,安装处理css文件的loader

② webpack.config.jsmodule -> rules数组中,添加loader规则如下:

module: { // 所有第三方文件模块的匹配规则

    rules: [

      { test: /\.css$/, use: ['style-loader','css-loader','postcss-loader']},

// test 表示匹配的文件类型, use 表示对应要调用的 loader

    ]    

  }

 

注意: uses 数组中指定的loader顺序是固定的,多个loader的调用顺序是从后往前调用

 

(3)配置postCSS自动添加css的兼容前缀

① 运行npm i postcss-loader autoprefixer -D命令

② 在项目根目录中创建postcss的配置文件postcss.config.js,并初始化如下配置:

const autoprefuxer = require('autoprefixer') // 导入自动添加前缀的插件

 

module.exports = {

  plugins: [autoprefuxer] // 挂载插件

}

 

③ webpack.config.jsmodule -> rules 数组中,修改cssloader规则如下:

module: {

    rules: [

      { test: /\.css$/, use: ['style-loader','css-loader','postcss-loader']},

    ]    

  }

 

(4)打包样式表中的图片和字体文件

① 运行npm i url-loader file-loader -D命令

② webpack.config.jsmodule -> rules数组中,添加loader规则如下:

module: {

    rules: [

      { test: /\.jpg|png|gif|bmp|eot|svg|woff|woff2$/, use: ['url-loader?limit=553961']},

// 其中 ? 之后的是 loader 的参数项

// limit 用来指定图片的大小,单位是字节(byte),只有小于limit大小的图片,才会被转为 base64 的图片

    ]    

  }

 

(5)打包处理js文件中的高级语法

① 安装babel转换器相关的包:npm i babel-loader @babel/core @babel/runtime -D

② 安装babel语法插件相关的包:npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D

③ 在项目根目录中,创建babel配置文件babel.config.js并初始化基本配置如下:

module.exports = {

  presets: ['@babel/preset-env'],

  plugins: ['@babel/plugin-transform-runtime','@babel/plugin-proposal-class-properties']

}

 

④ webpack.config.jsmodule -> rules 数组中,添加loader规则如下:

module: {

rules: [

      ....

           { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/}

    ]    

  }

 

4. vue单文件组件

(1)Vue单文件组件的基本结构

① template 组件的模块化区域

② script 业务逻辑区域

③ style 样式区域

(2)webpack中配置vue组件加载器

① 运行npm i vue-loader vue-template-compiler -D命令

② webpack.config.js配置文件中,添加vue-loader的配置如下:

const VueLoaderPlugin = require('vue-loader/lib/plugin')

 

module.exports = {

  plugins: [ // ...其它插件

new VueLoaderPlugin()], // 确保引入这个插件

  module: {

    rules: [

      // ...其它规则

      { test: /\.vue$/, use: 'vue-loader'}

    ]    

  }

}

 

(3)webpack项目中使用vue

① 运行 npm i vue -S 安装vue

② src -> index.js入口文件中,通过import Vue from ‘vue’来导入vue构造函数

③ 创建vue的实例对象,并指定要控制的区域

④ 通过render函数渲染App根组件

// 1.导入 vue 构造函数

import Vue from 'vue'

// 2.导入 App 根组件

import App from './components/App.vue'

 

const vm = new Vue({

// 3.指定 vm 实例要控制的页面区域

  el: '#app',

  // 4.通过 render 函数,把指定的组件渲染到 el 区域中

  render: h => h(App)

})

 

(4)webpack打包发布

上线前需要通过webpack将应用整体打包,看通过package.json文件配置打包命令:

"scripts": {

     // 用于打包的命令,该命令默认加载项目中的 webpack.config.js 配置文件

    "build": "webpack -p",

     // 用于开发调试的命令

    "dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"

  },

 

 

posted @ 2020-05-09 13:02  听见下雨声  阅读(176)  评论(0编辑  收藏  举报