webpack 前端构建

一、建立简单的项目目录

1、创建 manager 根目录(作为项目根目录)
2、执行 npm init,在根目录manager下自动生成 package.json文件
3、npm install webpack --save-dev,在项目中安装 webpack npm包
4、在根目录下 创建 webpack.config.js,所有的配置代码都写在里面
5、在根目录创建 src 目录,包含 html目录 > index.html,css目录 > index.css,js目录 > index.js,images目录 > index...

如图:

 

二、配置webpack.config.js文件

1、简单配置及使用

module.exports = {entry: {        'js/index': './src/js/index.js'},output: {path: './build',filename: '[name].js'}
};


执行构建命令:./node_modules/webpack/bin/webpack.js

ok,生成下图的目录结构了

 

2、安装,使用html-webpack-plugin插件

上一步我们通过构建,在根目录下生成了 ./build/js/index.js 文件,我们希望 生成 ./build/html/index.html 文件
首先安装一下插件 npm install html-webpack-plugin --save-dev,再来看看我们的配置代码

var HtmlWebpackPlugin = require('html-webpack-plugin');var plugins = [];plugins.push(    new HtmlWebpackPlugin({template: './src/html/index.html',filename: 'html/index.html',inject: 'body',hash: true, // index.js?hashcache: true, // if true (default) try to emit the file only if it was changed.showErrors: true, // if true (default) errors details will be written into the html page.chunks: ['js/index'] // filter chunks    })
);module.exports = {entry: {        'js/index': './src/js/index.js'},output: {path: './build',filename: '[name].js'},plugins: plugins
};


执行构建命令:./node_modules/webpack/bin/webpack.js后

打开./build/html/index.html文件,发现html中自动加上了script标签,引用的js路径加上了hash值,是不是感觉很赞
<script type="text/javascript" src="../js/index.js?f5f204be195973d9d81c"></script>

构建后的项目目录如图:

 

3、配合babel编译器,让我们所写的js代码支持es6语法

babel官网地址:https://babeljs.io/

安装babel编译器 
npm install --save-dev babel-loader babel-core
npm install --save-dev babel-preset-es2015

在根目录下创建 .babelrc 配置文件

{  "presets": ["es2015"]
}

webpack.config.js配置如下:


var HtmlWebpackPlugin = require('html-webpack-plugin');var plugins = [];var loaders = [{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" },{ test: /\.css$/, loader: "style-loader!css-loader" }
];plugins.push(    new HtmlWebpackPlugin({template: './src/html/index.html',filename: 'html/index.html',inject: 'body',hash: true, // index.js?hashcache: true, // if true (default) try to emit the file only if it was changed.showErrors: true, // if true (default) errors details will be written into the html page.chunks: ['js/index'] // filter chunks    })
);module.exports = {entry: {        'js/index': './src/js/index.js'},output: {path: './build',filename: '[name].js'},module: {loaders: loaders},plugins: plugins
};


准备好了,我们在 ./src/js/index.js文件中写入:


function testEs6(a, ...args) {console.log(args); // [2,3,4]}testEs6(1,2,3,4);console.log(Set);
console.log(Map);new Promise(function(resolve, reject) {});

执行构建命令:./node_modules/webpack/bin/webpack.js,OK,编译成功了,并没有报错,这意味着你可以在你的项目中使用es6了

 

4、css文件可以作为模块在js中被引入

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

在webpack.config.js文件中配置

var loaders = [{ test: /\.css$/, loader: "style-loader!css-loader" }
];

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

require('../css/index.css');

执行构建命令:./node_modules/webpack/bin/webpack.js,可以看到 ./src/css/index.css中的css代码 放在了./build/html/index.html文件的style标签内

 

5、本地服务 webpack-dev-server

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

执行服务启动命令:./node_modules/.bin/webpack-dev-server --progress --host 0.0.0.0 --port 8080 --colors --inline --hot --display-error-details --content-base src/

你可以通过浏览器输入下面地址来访问你的项目:
http://0.0.0.0:8080/html
localhost:8080/html
你的ip:8080/html

ok,也可以通过配置 webpack.config.js

var HtmlWebpackPlugin = require('html-webpack-plugin');var plugins = [];var loaders = [{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" },{ test: /\.css$/, loader: "style-loader!css-loader" }
];plugins.push(    new HtmlWebpackPlugin({template: './src/html/index.html',filename: 'html/index.html',inject: 'body',hash: true,cache: true,showErrors: true,chunks: ['js/index']})
);module.exports = {entry: {        'js/index': './src/js/index.js'},output: {path: './build',filename: '[name].js'},devServer: {progress: true,host: '0.0.0.0',port: 8080,colors: true,inline: true,        // hot: true,contentBase: './src',displayErrorDetails: true},module: {loaders: loaders},plugins: plugins
};

配置完了后,我们 在执行命令 ./node_modules/.bin/webpack-dev-server,ok,成功了
我们随便修改一下 ./src/html/index.html代码(也可以修改css,js代码),浏览器页面将会自动刷新,实时预览,神奇吧....

6、多文件自动构建

// webpack.config.jsvar glob = require('glob');var path = require('path');var HtmlWebpackPlugin = require('html-webpack-plugin');var source = getSource();var loaders = [{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" },{ test: /\.css$/, loader: "style-loader!css-loader" }
];var plugins = (function() {    var arr = [];source.htmlFiles.forEach(function(htmlFile) {arr.push(            new HtmlWebpackPlugin({template: htmlFile.pageSource,filename: htmlFile.filename,inject: 'body',hash: true,cache: true,showErrors: true,chunks: [htmlFile.jsChunkName]}));});    return arr;
}());module.exports = {entry: source.entry,output: {path: './build',filename: '[name].js'},devServer: {progress: true,host: '0.0.0.0',port: 8080,colors: true,inline: true,hot: true,contentBase: './src',displayErrorDetails: true},module: {loaders: loaders},plugins: plugins
};function getSource() {    var source = {htmlFiles: [],entry: {}};    var pageSource = glob.sync('./src/html/*.html');    var jsSource = glob.sync('./src/js/**/*.js');    var entry = {}; // 存储 alljsSource.forEach(function(item) {entry['js/' + path.basename(item, '.js')] = item;});pageSource.forEach(function(page) {        var jsChunkName = 'js/' + path.basename(page, '.html');source.htmlFiles.push({filename: 'html/' + path.basename(page),pageSource: page,jsChunkName: jsChunkName});source.entry[jsChunkName] = entry[jsChunkName];});    return source;
}


原文地址:http://www.cnblogs.com/yangjunhua/p/5615118.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简析 .NET Core 构成体系

简析 .NET Core 构成体系Roslyn 编译器RyuJIT 编译器CoreCLR & CoreRTCoreFX(.NET Core Libraries).NET Core 代码开发、部署、运行过程总结 前文介绍了.NET Core 在整个.NET 平台所处的地位&#xff0c;以及与.NET Framework的关系(原文链接)&#xff0c;本文将详细介绍.N…

判断一个男人穷还是富,只看这几点!

转载至&#xff1a; 来源&#xff1a;甜蜜爸妈手记&#xff08;wxtm01&#xff09; 作者&#xff1a;甜甜妈 创业君 导读 千主意万主意&#xff0c;如果不行动&#xff0c;永远就只是个想法而已。好想法要配得上行动才行。 看看他的爱好一个有事业心男人&#xff0c;绝对不…

php制作留言板的题_PHP实现留言板功能实例代码

本文实例为大家分享了php留言板的实现思路&#xff0c;供大家参考&#xff0c;具体内容如下&#xff1a;1.创建一个存放留言信息的文件名2.获取表单中的数据给一个变量3.判断文件的时候存在4.对文件执行写的操作&#xff0c;在这之前&#xff0c;注意打开文件的时候&#xff0c…

Java线程池,从使用到原理

转载自 Java线程池&#xff0c;从使用到原理线程池的技术背景 在面向对象编程中&#xff0c;创建和销毁对象是很费时间的&#xff0c;因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此&#xff0c;虚拟机将试图跟踪每一个对象&#xff0c;以便能够在对象销毁…

聊聊HTTPS和SSL/TLS协议

要说清楚 HTTPS 协议的实现原理&#xff0c;至少需要如下几个背景知识。1. 大致了解几个基本术语&#xff08;HTTPS、SSL、TLS&#xff09;的含义2. 大致了解 HTTP 和 TCP 的关系&#xff08;尤其是“短连接”VS“长连接”&#xff09;3. 大致了解加密算法的概念&#xff08;尤…

php事件编程,PHP相应button中onclick事件的案例分析

PHP相应button中onclick事件的案例分析发布时间&#xff1a;2020-11-10 11:28:31来源&#xff1a;亿速云阅读&#xff1a;71作者&#xff1a;小新小编给大家分享一下PHP相应button中onclick事件的案例分析&#xff0c;相信大部分人都还不怎么了解&#xff0c;因此分享这篇文章给…

Java 中Timer和TimerTask 定时器和定时任务使用的例子

转载自 Java 中Timer和TimerTask 定时器和定时任务使用的例子 这两个类使用起来非常方便&#xff0c;可以完成我们对定时器的绝大多数需求 Timer类是用来执行任务的类&#xff0c;它接受一个TimerTask做参数 Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执…

复制一个5G文件只需要两秒,全网最牛方法!

文章来至 微信公众号&#xff1a;中国黑客联盟 很多时候我们在复制比较大的文件的时候是一件多么痛苦的事情&#xff0c;因为少的几分钟多则十几分钟&#xff0c;这样的等待是我们无法容忍的&#xff01;那么今天我们就教大家如何快速的复制电脑大文件&#xff01; 首先我…

.NET Core也可以使用MongoDB了

可能是由于.NET Core还不是正式版的缘故吧&#xff0c;MongoDB的官方Driver(http://mongodb.github.io/mongo-csharp-driver/)一直不支持.NET Core&#xff0c;这给想在.NET Core上尝试MongoDB带来了不便&#xff0c;本人就是其中之一 &#xff1a;&#xff09; 于是Fork了官方…

Java多线程系列--“JUC线程池”06之 Callable和Future

转载自 Java多线程系列--“JUC线程池”06之 Callable和FutureCallable 和 Future 简介Callable 和 Future 是比较有趣的一对组合。当我们需要获取线程的执行结果时&#xff0c;就需要用到它们。Callable用于产生结果&#xff0c;Future用于获取结果。 1. Callable Callable 是…

php array分组,php数组分组简单例子

在php网站开发过程中有时候需要把结果集进行分组&#xff0c;使用php的内置函数array_chunk就可以实现 代码如下复制代码$teamsarray(1,2,3,4,5,6,7,8,9);$teamsarray_chunk($teams,2);print_r($teams);/*Array([0] > Array([0] > 1[1] > 2)[1] > Array([0] > 3…

SuperSocket源码解析之开篇

一 简介 官方介绍&#xff1a;SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架。你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作&#xff0c;但是你却可以使用 SuperSocket 很容易的开发出一款 Socket 服务器端软件&#…

Java守护线程概述

转载自 Java守护线程概述Java的线程分为两种&#xff1a;User Thread(用户线程)、DaemonThread(守护线程)。 只要当前JVM实例中尚存任何一个非守护线程没有结束&#xff0c;守护线程就全部工作&#xff1b;只有当最后一个非守护线程结束是&#xff0c;守护线程随着JVM一同结束…

php while循环次数,php while循环得到循环次数

php while循环得到循环次数复制代码 代码如下:$link mysql_connect(localhost,root,pwd);mysql_select_db(db);$sql "select region_id,local_name from regions where region_grade1";$result mysql_query($sql);$i 0;while ($row mysql_fetch_assoc($result)) {…

EntityFramework和EntityFramework.Extended使用说明——性能,语法和产生的sql

环境说明:EntityFramework 6.1.3和.Net Framework4.5性能注意事项:https://msdn.microsoft.com/zh-cn/library/cc853327.aspx比较精髓的一点:查询执行的各个阶段中的准备查询,每个唯一查询一次。包括编写查询命令、基于模型和映射元数据生成命令树和定义所返回数据的形状的成本…

三个水桶(看了三遍,想了五遍!)

转载至&#xff1a;微信公众号&#xff1a; 创业励志网 一 有位木匠砍了一树&#xff0c;把它做了三个木桶。 一个装粪&#xff0c;就叫粪桶&#xff0c;众人躲着&#xff1b; 一个装水&#xff0c;就叫水桶&#xff0c;众人用着&#xff1b; 一个装酒&#xff0c;就叫酒桶&…

nginx解析php失败,为什么nginx不能解析php?

只运行过这些代码yum install -y vim wget zip unzip git httpd php php-mysql php-odbc php-ldap php-gd php-mbstring php-xml php-xml-rpc php-bcmath libjpeg* mariadb ;rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarc…

.NET Core amp; ASP.NET Core 1.0在Redhat峰会上正式发布

众所周知&#xff0c;Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项。这个团队已经一起工作好几个月了,RHEL对.NET有许多需求。今天在RedHat 峰会DevNation 上宣布了.NET Core & ASP.NET Core 1.0 RTM。Red Hat有一个新的关于在…

任务调度(三)——Timer的替代品ScheduledExecutorService简介

转载自 任务调度(三)——Timer的替代品ScheduledExecutorService简介先前的两篇博文《任务调度(一)——jdk自带的Timer》和《任务调度(二)——jdk自带的Timer 动态修改任务执行计划》中&#xff0c;简单介绍了一下Timer&#xff0c;可以实现几本的功能&#xff0c;但是在多线程…

jquery实现动态五角星评分

先上代码&#xff0c;最后附属上我的实现思路&#xff0c;新手做的bug多&#xff0c;大牛勿喷&#xff1a;请看代码&#xff1a; ☆☆☆☆☆<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-trans…