超级详细使用Webpack4.X 搭建H5开发环境
超级详细使用Webpack4.X 搭建H5开发环境
很久没弄博客了,这两天有点时间来搞一下最近在弄的webpack工具
webpack是什么东西我就不介绍了,因为我使用的webpack4以上版本,这个版本有一些较大的更新,可以自己去官网上找找看就知道了。
一、准备工作
node安装,这个百度、Google一下一大把,不做介绍
二、开始
构建自己的目录结构,下图是我自己弄的目录结构:
1.png创建package.json文件,或者执行npm init 来生成
我的package.json文件如下:
{
"name": "h5Base",
"version": "1.0.0",
"description": "h5Base",
"main": "index.js",
"scripts": {
"service": "http-server -p 8002",
"build": "webpack --config ./webpack.config.js --mode production --env.NODE_ENV=production",
"dev": "node webpack.dev.service"
},
"author": "mjg",
"license": "ISC",
"devDependencies": {
"babel-loader": "^7.1.4",
"birdv3": "^0.3.33",
"clean-webpack-plugin": "^0.1.19",
"copy-webpack-plugin": "^4.5.1",
"css-loader": "^0.28.11",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
"file-loader": "^1.1.11",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.2.0",
"http-server": "^0.10.0",
"mini-css-extract-plugin": "^0.2.0",
"postcss-loader": "^2.1.3",
"replace": "^0.3.0",
"style-loader": "^0.20.3",
"uglifyjs-webpack-plugin": "^1.2.4",
"url-loader": "^1.0.1",
"webpack": "^4.3.0",
"webpack-cli": "^2.0.13",
"webpack-dev-server": "^3.1.1",
"webpack-merge": "^4.1.2"
},
"dependencies": {}
}
OK,上面是我自己用到的一些库,如果有需要的朋友拷贝过去,然后执行npm install即可。
- 修改代码了
3.1 先在index.html里面随便添加点测试代码:
<!doctype html>
<html lang="">
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Cache-Control " content="no-cache,must-revalidate">
<meta name="description" content="">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
<meta content="telephone=no" name="format-detection" />
<meta name="x5-orientation" content="portrait">
<title>demo title</title>
</head>
<body>
<div class="root">
<h1>我是测试</h1>
</div>
</body>
</html>
3.2 修改index.js代码:
import '../style/index.css'
console.log('====================================');
console.log(1);
console.log('====================================');
3.3 修改index.css代码:
.root {
background: red;
width: 200px;
height: 200px;
margin: 0 auto;
}
- 代码处理完了,准备需要调试了,但是我们调试的话就需要启动服务,接下来我们就需要配置webpack的服务了
4.1 创建webpack.config.js
const webpack = require('webpack');
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const srcDir = path.join(__dirname, './src');
const distDir = path.join(__dirname, './dist');
module.exports = {
entry: {
index: [
'webpack/hot/dev-server',
'webpack-dev-server/client?http://localhost:80',
"./src/js/index.js"
]
},
output: {
path: path.resolve(__dirname, 'dist'),
// 给js css 图片等在html引入中添加前缀
publicPath: "../../",
filename: 'js/[name].min.js',
},
devtool: 'source-map',
module: {
rules: [
{
test: /\.html$/,
use: [
{
loader: "html-loader",
options: { minimize: true }
}
]
},
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
},
{
test: /\.css$/,
exclude: /node_modules/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: {
loader: 'css-loader'
},
})
},
{
test: /\.(gif|jpg|png|woff|svg|eot|ttf)\??.*$/,
loader: 'url-loader?limit=8192&name=img/[name].[ext]'
}
]
},
plugins: [
new CleanWebpackPlugin(['dist']),
new ExtractTextPlugin('style/[name].min.css'),
new HtmlWebpackPlugin({
hash: true,
chunks: ['index'],
template: "./src/pages/index/index.html",
filename: "pages/index/index.html"
}),
new webpack.HotModuleReplacementPlugin(),
]
};
4.2 创建webpack.dev.service.js
var WebpackDevServer = require("webpack-dev-server");
var webpack = require("webpack");
var webpackConfig = require('./webpack.config.js');
var compiler = webpack(webpackConfig);
var server = new WebpackDevServer(compiler, {
hot: true,
historyApiFallback: true,
// It suppress error shown in console, so it has to be set to false.
quiet: false,
// It suppress everything except error, so it has to be set to false as well
// to see success build.
noInfo: false,
stats: {
// Config for minimal console.log mess.
assets: false,
colors: true,
version: false,
hash: false,
timings: false,
chunks: false,
chunkModules: false
},
// contentBase不要直接指向pages,因为会导致css、js支援加载不到
contentBase: __dirname + '/src/',
}).listen(80, '0.0.0.0', function (err) {
if (err) {
console.log(err);
}
});
- 启动服务配置好了,在看看packag.json里面启动服务的命令:
"dev": "node webpack.dev.service"
那么在命令终端中输入: sudo npm run dev
ps:为什么加sudo?因为使用了80端口,所以加sudo,如果不使用80端口就不用加sudo
在浏览器中输入:http://localhost/pages/index/index.html就可以看到效果了
如果想打包正式上线,执行命令: npm run build就行,注意把webpack.config.js里面的一些sourceMap、entry里面的热更新去掉,当然自己重新搞一个线上的webpack.pro.config.js也可以,把一些开发调试功能去掉就行了
OK,以上就是我看到webpack4有更新后,随便搞得一个H5与webpack结合开发的工具,有问题欢迎随时提出!下一章讲说一下怎么使用webpack执行本地接口proxy,解决本地开发接口调试跨域问题
附上github地址:https://github.com/majianguang/h5Base
下一章,如何接入webpack的proxy跨域代理,以及允许绑定本地host调试的:https://www.jianshu.com/p/b3e0cc3863e6
超级详细使用Webpack4.X 搭建H5开发环境的更多相关文章
- Windows+QT+Eclipse+MinGW搭建QT开发环境详细教程
Windows+QT+Eclipse+MinGW搭建QT开发环境详细教程 一.准备工具: QT-SDK for Windows:http://get.qt.nokia.com/qtsdk/qt-sd ...
- 苹果MAC中安装并搭建Android开发环境的详细步骤
Android的开发平台搭建主要需要的工具有:Java虚拟机JDK.Eclipse.Eclipse插件ADT(Android Developer Tool)和Android开发包SDK,以下是具体的安 ...
- 基于ionic4、cordova搭建android开发环境
前颜(yan)最近公司有一个项目需求是利用h5进行跨平台开发,这里所说的跨平台开发指的是:将h5代码利用某种方式或工具环境进行打包,最后生成android的apk以及ios的ipa. 本文只讲解and ...
- 基于 Webpack 4 搭建 Vue 开发环境
自从工作之后,就已经很久没有写过博客了.时间被分割得比较碎,积累了一段时间的学习成果,才写下了这篇博客. 之前有写过 Webpack4 的文章,但是都比较偏入门,唯一的一篇实战篇 -- 基于Webpa ...
- 抛弃强大的TFS ,借助于BugTracker.NET + Visual Source Safe + SourceLink搭建项目开发环境
微软公司的Team Foundation Server是个强大的项目管理工具,如果用.NET开发,它应该是首选的项目管理平台.TFS的成本比较高,而且和Visual Studio集成紧密.比如TSF有 ...
- 单机搭建Android开发环境(四)
单机搭建安卓开发环境,前三篇主要是磨刀霍霍,这一篇将重点介绍JDK.REPO.GIT及编译工具的安装,下载项目代码并编译.特别说明,以下操作基于64位12.04 Server版Ubuntu.若采用其他 ...
- 单机搭建Android开发环境(三)
单机搭建Android开发环境,第一篇重点介绍了如何优化Windows 7系统,以提高开发主机的性能并延长SSD的使用寿命.第二篇重点介绍了基于VMWare安装64位版的Ubuntu 12.04,并安 ...
- 【原创】windows下搭建vue开发环境+IIS部署
[原创]win10下搭建vue开发环境 如果要转发,请注明原作者和原产地,谢谢! 特别说明:下面任何命令都是在windows的命令行工具下进行输入,打开命令行工具的快捷方式如下图: 详细的安 ...
- 在WP8上搭建cocos2d-x开发环境
在WP8上搭建cocos2d-x开发环境 转自:https://github.com/koowolf/cocos-docs/blob/master/manual/framework/native/in ...
随机推荐
- java学习笔记(六):变量类型
java一共三种变量: 局部变量(本地变量):方法调用时创建,方法结束时销毁 实例变量(全局变量):类创建时创建,类销毁时销毁 类变量(静态变量):程序启动是创建,程序销毁时销毁 public cla ...
- Page Visibility(网页可见性) API与登录同步引导页实例页面
页面1 HTML代码: <p id="loginInfo"></p> JS代码: (function() { if (typeof pageVis ...
- php curl抓取类分享
class UsualFunForNetWorkHelper { /*** * post请求数据 */ public static function HttpsPost($url, $data = n ...
- 用归并排序或树状数组求逆序对数量 poj2299
题目链接:https://vjudge.net/problem/POJ-2299 推荐讲解树状数组的博客:https://blog.csdn.net/int64ago/article/details/ ...
- vue的条件渲染和列表渲染介绍
一.条件渲染 1.v-if语句 <div v-if="seen">hahahah</div> <!-- v-if插入或者删除元素的指令 --> ...
- [leetcode]84. Largest Rectangle in Histogram直方图中的最大矩形
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- IOS Javascript Date的坑
Date对象是JavaScript提供的日期和时间的操作接口,它有多种用法.手册上或者网上也有很多文章介绍,这里就不再次复述了. 上次遇到一个坑,这里总结下,也不是什么大问题,若是如果有经验,就不会花 ...
- node.js中path路径模块的使用
path模块是node.js中处理路径的核心模块.可以很方便的处理关于文件路径的问题. join() 将多个参数值合并成一个路径 const path = require('path'); conso ...
- Django跨域(前端跨域)
前情回顾 在说今天的问题之前先来回顾一下有关Ajax的相关内容 Ajax的优缺点 AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器响应内容不再是整个页 ...
- redis应用实践
晚些时候自己总结,先贴出看到的一篇文章. https://www.cnblogs.com/NiceCui/p/7794659.html