3.插件

在前端迅速发展的今天,许多没有太多技术含量并且感觉是在浪费时间的事情,就可以交给构建工具来做,例如:我们去手动创建index.html,手动引入打包好的js文件等操作,都可以叫个webpack来做,帮助我们提升效率,因此,你只需要理解,插件其实就是webpack的一些扩展功能,旨在帮助我们提示效率的工具

3.1.html-webpack-plugin插件

这个插件就是帮我们自动生成html文件并且自动引入打包好的js文件

1.插件安装

npm install html-webpack-plugin --save-dev

  

2.修改webpack配置,让插件生效

const path = require('path')
// 引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'app.js'
},
plugins: [
//添加插件
new HtmlWebpackPlugin()
]
}

  

3.运行查看效果

npm run dev

  

4.其他常用配置项目

const path = require('path')
// 引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'app.js'
},
plugins: [
//添加插件
new HtmlWebpackPlugin(
//在这个插件内部,可以指定模版和自定义生成的文件名
{
filename: 'main.html',
template: 'src/index.html'
}
)
]
}

  

有了上面两个配置后,这个插件帮助生成一个main.html,并且是基于template生成的

4.devserver

webpack-dev-server 为你提供了一个简单的 web 服务器,并且能够实时重新加载(live reloading)。

4.1.安装webpack-dev-server

npm install webpack-dev-server --save-dev

  

修改package.json配置文件,在script选项中加入下面代码:

"start": "webpack-dev-server",

  

整个package.json配置文件如下:

{
"name": "code",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "./node_modules/webpack/bin/webpack.js",
"start": "webpack-dev-server",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"html-webpack-plugin": "^2.30.1",
"webpack": "^3.10.0"
}
}

  

在终端运行命令:

npm start

  

命令启动后,通过http://localhost:8080/ 访问

4.2.让工具自动给我们打开服务器地址

在webpack.config.js中添加配置

devServer:{
open: true
}

  

其中open:true 表示自动打开浏览器

4.3.修改服务器端口

在webpack.config.js中添加配置项目

devServer:{
open: true,
port: 8090
}

  

其中port后面给一个自定义端口

4.4.设置默认访问目录

devServer:{
open: true,
port: 8090,
contentBase: './dist'
}

5.loader

5.1.什么是loader?

loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。

本质上,webpack loader 将所有类型的文件,转换为应用程序的依赖图可以直接引用的模块。

在更高层面,在 webpack 的配置中 loader 有两个目标。

  1. 识别出应该被对应的 loader 进行转换的那些文件。(使用 test 属性)
  2. 转换这些文件,从而使其能够被添加到依赖图中(并且最终添加到 bundle 中)(use 属性)

总结:有了loader,webpack就会把非js文件也看成是模块,并且可以引用它

5.2.支持css文件打包

安装css-loader

npm install css-loader --save-dev

  

修改webpack.config.js文件,添加css-loader配置项

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

  

完整webpack.config.js文件:

const path = require("path")

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

module.exports = {
entry: "./src/index.js",
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'app.js'
},
plugins: [
new HtmlWebpackPlugin({
template:'./src/index.html',
filename:'index.html'
})
],
devServer:{
open: true,
contentBase: './dist'
},
module:{
rules: [
{
test: /\.css$/,
use: ['css-loader']
}
]
} }

  

配置完成后,测试是否生效,首先新建index.css,添加内容:

body{
background: #009f95
}

  

在index.js文件中引入 index.css文件

import module_1 from './module_1'
import module_2 from './module_2'
import module_3 from './module_3' document.write("hello world")
import "./index.css" module_1()
module_2()
module_3()

  

运行命令,查看效果:

npm start

  

此时,发现并没有任何效果,原因是css-loader只负责把css文件打包到js中,并没有加入到index.html结构中, 还需要引入style-loader来处理,让style样式加入到index.html结构中

npm install style-loader --save-dev

  

接下来,需要把style-loader配置到webpack.config.js文件中

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

  

再次运行 npm start 查看效果

 

webpack最佳入门实践系列(2)的更多相关文章

  1. webpack最佳入门实践系列(6)

    10.css模块化 10.1.什么是css模块? CSS模块就是所有的类名都只有局部作用域的CSS文件,当你在一个JavaScript模块中导入一个CSS文件时,CSS模块将会定义一个对象,将文件中类 ...

  2. webpack最佳入门实践系列(5)

    9.路径相关 原来我们打包的东西都存放到了dist目录下,并没有进行分类存储,乱成一团,这一节我们就要处理一下打包的路径,让打包后的目录看起来更加优雅 9.1.代码准备 我们先建立起这样一个目录结构 ...

  3. webpack最佳入门实践系列(4)

    7.使用字体 7.1.安装字体库-font-awesome 我们通过npm来安装字体 npm install font-awesome --save 这个时候,我们的package.json配置文件变 ...

  4. webpack最佳入门实践系列(3)

    6.使用图片 6.1.尝试在css中引入图片 在src目录下新建css文件夹,并且在css文件夹下创建app.css文件,在src目录下新建images文件夹,放入一张图片,在app.css中引入这张 ...

  5. webpack最佳入门实践系列(1)

    1.webpack简介 webpack 是一个现代 JavaScript 应用程序的模块打包器(module bundler).它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源 1 ...

  6. webpack的入门实践,看这篇就够了

    webpack的入门实践 我会将所有的读者概括为初学者,即使你可能有基础,学习本节之前我希望你具有一定的JavaScript和node基础 文中的 ... ...代表省略掉部分代码,和上面的代码相同 ...

  7. 【Vuejs】301- Vue 3.0前的 TypeScript 最佳入门实践

    前言 我个人对更严格类型限制没有积极的看法,毕竟各类转类型的骚写法写习惯了. 然鹅最近的一个项目中,是 TypeScript+ Vue,毛计喇,学之...-真香! 1. 使用官方脚手架构建 npm i ...

  8. python 最佳入门实践

    勿在浮沙筑高台,无论什么技术,掌握核心精神和api,是很重要的. 但是入门过程也可能不是一帆风顺的,这里有八个入门任务,看看你完成了没有: http://code.tutsplus.com/artic ...

  9. es6+最佳入门实践(13)

    13.模块化 13.1.什么是模块化 模块化是一种处理复杂系统分解为更好的可管理模块的方式.通俗的讲就是把一个复杂的功能拆分成多个小功能,并且以一种良好的机制管理起来,这样就可以认为是模块化.就像作家 ...

随机推荐

  1. (转)规划从 OpenGL ES 2.0 到 Direct3D 的移植

    如果你移植 iOS 或 Android 平台中的游戏,那么你可能需要在 OpenGL ES 2.0 方面进行大量投资.如果你准备将你的图形管道代码库移动到 Direct3D 11 和 Windows ...

  2. iframe子元素相对于父页面滚动条固定(iframe无滚动条,iframe固定高度有滚动条,两种情况)

    一.当iframe自适应高度,无滚动条时候: 例如这样: //随着父页面滚动条滚动定位“#qn-quc”他的位置固定在顶部 $(parent.window).scroll(function() { v ...

  3. 【PHP】判断变量是否为控

    1. isset功能:判断变量是否被初始化 说明:它并不会判断变量是否为空,并且可以用来判断数组中元素是否被定义过注意:当使用isset来判断数组元素是否被初始化过时,它的效率比array_key_e ...

  4. 【bug】【yii】配置log时,报错 Setting read-only property: yii\web\Application::log

    Setting read-only property: yii\web\Application::log 配置放在了 components 外面,应该放在里面

  5. PHP计算两个字符的相似程度similar_text

    在网站开发中,我们会常常要计算两个字符的相似程度,那么PHP为我们提供了一个函数similar_text;  1,similar_text的用法 如果我想计算"ly89cn"和&q ...

  6. shell脚本中的交互式输入自动化

    shell中有时我们需要交互,但是呢我们又不想每次从stdin输入,想让其自动化,这时我们就要使shell交互输入自动化了. 1    利用重定向     重定向的方法应该是最简单的 例: 以下的te ...

  7. hdu 1257最少拦截系统

    最少拦截系统 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的 ...

  8. 将SpringBoot默认Json解析框架jackson替换成fastjson

    步骤一:引入依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson< ...

  9. 菜鸟学Linux - bash的配置文件

    bash是各大Linux发行版都支持的shell.当我们登陆bash的时候,虽然我们什么都没做,但是我们已经可以在bash中调用各种各样的环境变量了.这是因为,系统中已经定义了一系列的配置文件,以及加 ...

  10. mysql--timestamp加减

    利用timestamp()对timestamp类型进行秒加减操作: 1.加10秒: 2.减10秒: