webpack 教程 那些事儿02-从零开始
接着上篇我们有了最简单的安装了webpack的项目目录
这节我们从零开始搭建一个简单的基于webpack的spa应用demo
本节只说基础常用配置项,复杂后续讲解.
文章目录
新建项目结构目录,如下
目录结构
views: 模版目录
modules: js模块目录
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body{
background: #f90;
}
h2{
text-align: center;
font-size: 30px;
padding: 10px 0;
}
</style>
</head>
<body>
<script src="/output/static/app.js"></script>
</body>
</html>
|
1
2
3
|
# main.js
var Hello = require("./modules/hello");
document.write(Hello)
|
1
2
|
# hello.js
module.exports = "<h2>Hello donglegend.</h2>";
|
配置webpack.config.js文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# 根目录新建webpack.config.js(webpack 会自动寻找一个叫webpack.config.js的文件去执行)
var path = require("path");
module.exports = {
entry: {
app: path.resolve(__dirname, "./app/main.js")
// entry:顾名思义入口文件,app/main.js,输入名字为 app.js
},
output: {
path: path.resolve(__dirname, "./output/static"),//输出路径
publicPath: 'static/', //调试或者 CDN 之类的域名,稍候会用到
filename: "[name].js" //配置生成的文件名
},
resolve: {
root: __dirname, //模块从里开始查找
extensions: ['', '.js', '.vue'] //模块后缀名,先这么些,稍候会用到
},
module: {
loaders: [] //模块加载器,默认null
},
plugins: [] //插件,默认null
}
# 在终端执行命令:webpack
#(不出意外,会生成output目录,/output/static/app.js)
|
启动一个http服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 根目录新建dev-server.js
var express = require("express");
var app = express();
var port = process.env.PORT || 3000;
app.use(express.static(__dirname+'/'));
app.listen(port, function (err){
if (err) {
throw err;
}
console.log('Listening at http://localhost:' + port + '\n')
})
# 执行命令 sudo cnpm i express --save-dev
# 安装完成 执行命令: node dev-server.js
# Listening at http://localhost:3000
# 服务正常启动,chrome浏览器输入 http://localhost:3000/app/views/index.html
|
ok,看到这个就表示成功了
回想一下,我们做了什么,用webpack命令打包了main.js–>app.js
没错这是最简单的webpack,项目当然不能这么做,我们还没用任何loader和plugins
体验loader加载器功能
这里用 vue-loader做一个案例(好兴奋,终于可以可以加载我的.vue文件了
要想试用,先行安装,麻利利的:
sudo cnpm i vue vue-loader --save-dev
看package.json(vue默认依赖babel等模块,既然如此奔着不浪费原则,就用es6书写吧)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
"devDependencies": {
"babel-core": "^6.13.2",
"babel-loader": "^6.2.5",
"babel-plugin-transform-runtime": "^6.12.0",
"babel-preset-es2015": "^6.13.2",
"babel-runtime": "^6.11.6",
"css-loader": "^0.24.0",
"express": "^4.14.0",
"vue": "^1.0.26",
"vue-hot-reload-api": "^1.3.3",
"vue-html-loader": "^1.2.3",
"vue-loader": "^8.5.2",
"vue-style-loader": "^1.0.0",
"webpack": "^1.13.2"
}
|
- app目录下新建components目录
- components下新建mountains.vue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# mountains.vue
<template>
<ul>
<li v-for="v in list" v-text="v"></li>
</ul>
</template>
<style>
ul{
width: 800px;
margin: 0 auto;
text-align: center;
}
li{
padding: 10px 0;
margin: 6px 0;
background: #efefef;
-webkit-transition: all .3s;
}
li:hover{
background: #ccc;
}
</style>
<script>
export default {
data () {
return {
list: ["恒山", "衡山", "华山", "泰山", "嵩山"]
}
}
}
</script>
|
1
2
3
4
5
6
7
8
9
10
|
# main.js
import Vue from "vue";
import Mountain from "./components/mountains.vue";
new Vue({
el: "body",
components: {
Mountain
}
})
|
1
2
|
# index.html 增加下列标签
<mountain></mountain>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# webpack.config.js 文件的 module增加vue和babel加载器
loaders: [{
test: /\.vue$/,
loader: 'vue'
}, {
test: /\.js$/,
loader: 'babel',
query: {
presets: ['es2015']
},
include: "/",
exclude: /node_modules/
}]
|
执行命令 : webpack
刷新页面 http://localhost:3000/app/views/index.html
至此,vue文件和es6代码 正确被加载执行,有木有很开心。
小提示:如果执行webpack命令有出错,可以加上参数 webpack –display-error-details
两个重量级中间件
不知不觉又写了这么多,然而还没真正开始,接着观看下篇,
webpack真正的牛逼之处,两个中间件: webpack-dev-middleware 和 webpack-hot-middleware
webpack 教程 那些事儿02-从零开始的更多相关文章
- webpack 教程 那些事儿04-webpack项目实战分析
这节主要讲解真正项目用用到的 webpack配置问题,项目实战篇 就像我们不会完全做一个项目,不用别人的轮子一样.这个配置我们借用 vue-cli 搭建的配置来研究,因为它已经足够优秀. 有了前面的基 ...
- webpack 教程 那些事儿06-gulp+webpack多页
本篇主要讲述用gulp+webpack构建多页应用 折腾到现在,项目还必须要进行,.vue文件必须要加载,也就是webpack必须引入.时间不多了,抛弃上个方案之后,只能牺牲热加载性能,用gulp+w ...
- webpack 教程 那些事儿05-多页应用
本篇主要关于如何用webpack构建多页应用 为什么要构建多页应用呢?因为我的项目本来就是多页应用啊至于为什么要用webpack?因为我要用vue啊,嫌gulp 每次打包慢 啊 文章目录 1. 利用v ...
- webpack 教程 那些事儿03-webpack两大精华插件,热加载
本节主要讲述 webpack的两大经典开发调试插件,热插拔内存缓存机制 文章目录 1. html-webpack-plugin插件的使用 2. webpack-dev-middleware 插件登场 ...
- webpack 教程 那些事儿01-webpack是什么
文章目录 1. 为什么引入webpack? 2. webpack到底是什么? 3. webpack的工作流程理念 4. webpack的使用 4.1. install webpack 5. 分享源码d ...
- Webpack教程
打开链接:Webpack教程
- Webpack教程二
Webpack教程一 开发技巧 启用source-map 现在的代码是合并以后的代码,不利于排错和定位,只需要在config中添加 ... devtool: 'eval-source-map', .. ...
- [js高手之路]深入浅出webpack教程系列6-插件使用之html-webpack-plugin配置(下)
上文我们对html-webpack-plugin的实例htmlWebpackPlugin进行了遍历分析,讲解了几个常用属性( inject, minify )以及自定义属性的添加,本文,我们继续深入他 ...
- [js高手之路]深入浅出webpack教程系列5-插件使用之html-webpack-plugin配置(中)
上文我们讲到了options的配置和获取数据的方式,本文,我们继续深入options的配置 一.html-webpack-plugin插件中的options除了自己定义了一些基本配置外,我们是可以任意 ...
随机推荐
- HTML5学习总结-08 应用缓存(Application Cache)
一 应用缓存(Application Cache) 1 应用缓存 HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: ...
- COCI2011:友好数对
校内OJ传送门 一般容斥,具体思想参考代码实现,刚开始是在读入时处理所有数的二进制子集,没看$N$的范围以为复杂度不会爆炸.. 然后复杂度就爆炸了. 小优化: 每次整个载入二进制,计数.这个结束后枚举 ...
- Django admin美化插件suit
Django Suit 效果 使用前django页面 使用后django页面 安装 官方文档 http://django-suit.readthedocs.io/en/develop/index.ht ...
- 在spark-shell里用集群方式启动时加入用户需要的jar
希望在spark-shell中测试集群方式的elasticsearch操作, # 1 首先下载相关的jar # 2 启动spark-shell时用--jars ./bin/spark-shell –m ...
- 自然语言16_Chunking with NLTK
Chunking with NLTK 对chunk分类数据结构可以图形化输出,用于分析英语句子主干结构 # -*- coding: utf-8 -*-"""Created ...
- Cache-Aside Pattern解析
使用这种模式,可以帮助我们维护Cache中的数据. 使用Cache容易遇到的问题: 使用缓存,主要是为了将一些重复访问的数据存到缓存,开发者希望缓存中的数据和数据源中的保持一致,这就需要程序中有相应的 ...
- JSON FX
https://github.com/mckamey/jsonfx-v1#svn/trunk/JsonFx/JsonFx.Json
- PInvoke和Marshal的姿势
PInvoke http://www.mono-project.com/docs/advanced/pinvoke/ https://msdn.microsoft.com/en-us/library/ ...
- echosp 销量排行 新增实际价格
找到lib_goods.php第147行,代码 $sql = 'SELECT g.goods_id, g.goods_name, g.shop_price,g.goods_thumb, SUM(og. ...
- JQM页面跳转,多种效果
<div data-role="page" id="pageone"> <div data-role="header"&g ...