1、npm脚本运行webpack与命令行输入webpack的区别  : https://segmentfault.com/a/1190000011052193

   npm 模块的 安装 和 卸载  : https://blog.csdn.net/yihanzhi/article/details/75665959

   npm命令中,--save--dev --save的区别  : https://blog.csdn.net/tjcjava/article/details/69257848 (只是在package.json中位置不一样,其他的没有区别。nodejs运行是根据依赖树执行的,与package.json位置无关。如果每次安装都是npm install就更是完全没有区别)

2、(bug)webpack@3.12.0版本,在命令行直接使用webpack就可以顺利打包,使用npm run webpack提示错误 :

  暂时不知道什么原因,重新安装 或者 换一个版本(比如 webpack@3.5.6)就没有这个问题了。


一、webpack配置项:https://www.jianshu.com/p/43fa9ce97420

  1、entry:入口,定义要打包的文件

  2、output:出口,定义打包输出的文件;包括路径,文件名,还可能有运行时的访问路径(publicPath)参数

  3、module: webpack将所有资源都看做是模块,而模块就需要加载器;

  4、resolve:定义能够被打包的文件,文件后缀名

  5、plugins:定义以下额外的插件

二、概念:

  1、loader解析器:

    如果我们想要import './src/scss/main.js’这种形式引入css,scss,less,stylus,js等等文件,我们就需要使用loader解析器配置css


下面的参考:https://www.jianshu.com/p/90e1049a5677

3、生成Source Maps  :

module.exports = {
devtool: 'eval-source-map', // 这里配置下就可以
entry: __dirname + "/app/main.js",
output: {}
}

4、使用webpack构建本地服务器 : 安装包  webpack-dev-server

  devServer: {
contentBase: "./public",//本地服务器所加载的页面所在的目录
historyApiFallback: true,//不跳转
inline: true,//实时刷新
host: "192.168.0.232", //本机的局域网ip //默认 域名:localhost ; 端口:8080
open: true //是否运行成功后直接打开页面
}

注意:webpack版本与webpack-dev-server版本有兼容问题的。

5、模块 — js转码器(Babel ) :(webpack.config.js文件配置很多项时,配置文件会特别复杂。所以 babel的配置选项 可以放在一个单独的名为 ".babelrc" 的配置文件中)

核心的两个包:

npm install --save-dev babel-core babel-loader

注意:babel-core 版本与 babel-loader 版本有兼容问题的。(亲测,两个都是最新包都出现不兼容的问题,根据提示babel-core@6.* 和 babel-loader@7.*兼容使用)

  a、es6 转码器 : 安装包   babel-preset-env

  module: {
rules: [ // webpack2.x 之后,loaders 被 rules 代替,参考:https://www.jianshu.com/p/11e52308421f
{
test: /\.js$/, // 匹配.js文件
//排除也就是不转换node_modules下面的.js文件
exclude: /(node_modules|bower_components)/,
use:[{
//加载器
loader: "babel-loader"
}]
}
]
}

  b、JSX 转码器 : 安装包   babel-preset-react

6、模块 — css转码器 : (其他的配置,参考 https://www.jianshu.com/p/90e1049a5677

核心的两个包:

css-loader  使你能够使用类似@import 和 url(...)的方法实现 require()的功能。
style-loader 将所有的计算后的样式加入页面中。

npm install --save-dev css-loader style-loader
  module: {
rules: [
{
test: /\.js$/, // 匹配.js文件
//排除也就是不转换node_modules下面的.js文件
exclude: /(node_modules|bower_components)/,
use:[{
//加载器
loader: "babel-loader"
}]
},
{ // 这里配置这两个工具
test: /\.css$/,
use: [ // 请注意这里对同一个文件引入多个loader的方法。
{
loader: "style-loader"
}, {
loader: "css-loader"
}
]
}
]
}

  a、CSS预处理器

7、 插件(Plugins)— 根据html文件生成html文件: https://www.cnblogs.com/xianrongbin/p/6431288.html

npm install html-webpack-plugin --save-dev
  // 配置插件
plugins: [
// new webpack.BannerPlugin('版权所有,翻版必究')
new htmlWebpackPlugin({
filename:'index.html', //通过模板生成的文件名
template:'index.html',//模板路径
inject:true, //是否自动在模板文件添加 自动生成的js文件链接
title:'这个是WebPack Demo',
minify:{
removeComments:true, //是否压缩时 去除注释
// collapseWhitespace: true,
// removeAttributeQuotes: true
}
})
]

  

全部代码:

const webpack = require('webpack'); // 引入webpack

var htmlWebpackPlugin=require('html-webpack-plugin');

module.exports = {
// source-map
devtool: 'source-map',
// 文件人口、存放
entry: __dirname + "/app/main.js",//已多次提及的唯一入口文件
output: {
path: __dirname + "/public",//打包后的文件存放的地方
filename: "bundle.js"//打包后输出文件的文件名
},
// 本地服务器
devServer: {
contentBase: "./public",//本地服务器所加载的页面所在的目录
historyApiFallback: true,//不跳转
inline: true, //实时刷新
host:'localhost',
port:9900
},
// 模块
module: {
rules: [
{
test: /\.js$/, // 匹配.js文件
//排除也就是不转换node_modules下面的.js文件
exclude: /(node_modules|bower_components)/,
use:[{
//加载器
loader: "babel-loader"
}]
},
{ // 这里配置这两个工具
test: /\.css$/,
use: [ // 请注意这里对同一个文件引入多个loader的方法。
{
loader: "style-loader"
}, {
loader: "css-loader"
}
]
}
]
},
// 配置插件
plugins: [
// new webpack.BannerPlugin('版权所有,翻版必究')
new htmlWebpackPlugin({
filename:'index.html', //通过模板生成的文件名
template:'index.html',//模板路径
inject:true, //是否自动在模板文件添加 自动生成的js文件链接
title:'这个是WebPack Demo',
minify:{
removeComments:true, //是否压缩时 去除注释
// collapseWhitespace: true,
// removeAttributeQuotes: true
}
})
]
}

8、webpack 处理 html 模块:https://blog.csdn.net/connie_0217/article/details/79747137 或 https://www.cnblogs.com/xianrongbin/p/6431288.html (推荐)

  说明:webpack的人口文件是 js文件,根据依赖关系打包的。html 的打包是在 插件中处理的。

9、自己 配置的的webpack 项目框架。  https://github.com/kevin3623/webpack


webpack多页应用脚手架 :https://www.jianshu.com/p/eadea5d27f0c

说明:这里eslint规则(可以根据需要关闭对应的 规则)

  a、作者使用的是Linux系统,所以eslint会报错。解决方法:https://yq.aliyun.com/ziliao/572681

  b、强制在对象和数组文字中一致地使用尾随逗号。修改方法:https://cloud.tencent.com/developer/section/1135595

(不推荐自己配置 脚手架)

webpack配置教程的更多相关文章

  1. webpack 使用教程--实时刷新测试

    学习webpack,基本始终是围绕: 1.如何安装webpack 2.如何使用webpack 3.如何使用loader 4.如何使用开发服务器 可能我们会在如何使用开发服务器的时候,遇到诸如调试的相关 ...

  2. webpack使用教程

    webpack使用教程 接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpack教程满天飞,但是 ...

  3. Webpack 4教程 - 第七部分 减少打包体积与Tree Shaking

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://wanago.io/2018/08/13/webpack-4-course-part ...

  4. 使用webpack配置react并添加到flask应用

    学习react,配置是很痛苦的一关,虽然现在有了create-react-app这样方便的工具,但是必须要自己配置一遍,才能更好地进行项目开发. 首先要明确一个概念:react的文件必须经过编译才能被 ...

  5. vue项目使用vux框架配置教程

    吐槽下,这个vux配置教程那..写的实在是坑,也不搞个示例代码...想上天吗???? 正常安装的话...100%报错...以下是正确配置 1.项目里安装vux   npm install vux -- ...

  6. webpack 配置 Vue 多页应用 —— 从入门到放弃

    webpack 配置 Vue 多页应用 -- 从入门到放弃 一直以来,前端享有无需配置,一个浏览器足矣的优势,直到一大堆构建工具的出现,其中 webpack 就是其中最复杂的一个,因此出现了一个新兴职 ...

  7. [webpack] 配置react+es6开发环境

    写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...

  8. openvpn配置教程

    openvpn配置教程 本文是为解决本地服器能从外网访问web页,从新改写(临摹) 烂泥:ubuntu 14.04搭建OpenVPN服务器这篇文章 腾讯云为服务器,本地服务器为客户端 一.服务器安装o ...

  9. VMware Workstation虚拟机中的Linux通过NAT模式共享上网配置教程

    VMware Workstation虚拟机中的Linux通过NAT模式共享上网配置教程 在VMware Workstation虚拟机下面,Linux虚机要上网,一般是桥接模式,但我自己的电脑上网的环境 ...

随机推荐

  1. HDU 6040 Hints of sd0061 —— 2017 Multi-University Training 1

    Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  2. 【HDOJ6599】I Love Palindrome String(PAM,manacher)

    题意:给出一个由小写字母组成的长为n的字符串S,定义他的子串[L,R]为周驿东串当且仅当[L,R]为回文串且[L,(L+R)/2]为回文串 求i=[1,n] 所有长度为i的周驿东串的个数 n<= ...

  3. python3下tomorow模块报语法错误def async(n, base_type, timeout=None): ^ SyntaxError: invalid syntax

    python3 pip 安装tomorrow模块,调用时候会报错:def async(n, base_type, timeout=None): ^ SyntaxError: invalid synta ...

  4. 牛客假日团队赛9 A 乘积最大 (简单DP)

    题目:https://ac.nowcoder.com/acm/contest/1071/A 题意:给你一个串,然后给你m个乘号,用m个乘号分割开这个串,然后求分割可以求出的最大值 思路:首先范围很小 ...

  5. [CSP-S模拟测试]:Walk(BFS+建边)

    题目描述 在比特镇一共有$n$个街区,编号依次为$1$到$n$,它们之间通过若干条单向道路连接. 比特镇的交通系统极具特色,除了$m$条单向道路之外,每个街区还有一个编码${val}_i$,不同街区可 ...

  6. iPad如何恢复

    iPad在有网络连接的情况下,可以通过iCloud进行恢复. 没有连接WiFi的情况下,只能通过USB连接才能恢复. ①下载最新版本的iTunes:https://support.apple.com/ ...

  7. C++ allocator类学习理解

    前言 在学习STL中containers会发现C++ STL里定义了很多的容器(containers),每一个容器的第二个模板参数都是allocator类型,而且默认参数都是allocator.但是a ...

  8. 【SpringBoot】SpringBoot的基础,全面理解bean的生命周期

    前言 前段时间直接上手使用springboot开发了一个数据平台的后台部分,但是自身对于springboot的原理和过程还不是很清晰,所以反过来学习下springboot的基础. 大家都知道sprin ...

  9. 120、TensorFlow创建计算图(二)

    #创建一个计算流图 #大多数tensorflow程序开始于dataflow graph 的构造函数 #在这个命令中你执行了tensorflow api的函数 #创建了新的操作tf.Operation ...

  10. npm run mock | npm run dev只能启动一个

    解决方法: 开两个命令窗口 先运行npm run mock 再运行npm run dev