关于 webpack 的研究
webpack
的官网:http://webpack.github.io/
安装webpack
- 演示项目安装,使用全局安装:
npm install webpack -g
- 真正的项目使用依赖式安装,保证在其他机器上也能运行,不依赖全局的
webpack
:npm install webpack --save-dev
- 项目常用命令:
npm init
npm install webpack --save-dev
配置
- 可以在命令行直接制定配置,正式项目中不会使用此种方式
- 在项目根目录新建文件
webpack.config.js
,webpack
会自动找此配置文件,正式项目中使用此种方式 webpack
会自动处理require
的js
文件,其他文件(如:css
、image
)需要使用loader
,使用前需要先下载loader
下载命令:npm install url-loader -save-dev
- 运行
webpack
使用:webpack --display-error-details
,后面的参数“--display-error-details”是推荐加上的,方便出错时能查阅更详尽的信息(比如 webpack 寻找模块的过程),从而更好定位到问题。 webpack
的主要命令有:$ webpack --config XXX.js //使用另一份配置文件(比如webpack.config2.js)来打包 $ webpack --watch //监听变动并自动打包 $ webpack -p //压缩混淆脚本,这个非常非常重要! $ webpack -d //生成map映射文件,告知哪些模块被最终打包到哪里了
externals
用于关联外部依赖,如jquery可以在外部使用script
形式引入,如下:module.exports = {
entry: "./src/index.js",
output: {
path: "./build/",
filename: "main.js",
publicPath: "../build"
},
externals: {
"jquery": "jQuery"
},
module: {
loaders: [
{ test: /\.css$/, loader: "style!css" },
{ test: /\.html$/, loader: "html" },
{ test: /\.jpg|\.png$/, loader: "file?name=/image/[path][name].[ext]" }
]
}
}
之后在代码中引入jquery可用var $ = require("jquery");
形式,webpack生成的代码如下:
```
// 源代码
var $ = require("jquery");
// webpack生成代码片段
var $ = __webpack_require__(8);
/* 8 */
/***/ function(module, exports) {
module.exports = jQuery;
/***/ }
```
- 像jquery这样的形式,可以不引用到模块中,直接使用,如
$("#demo").html(dom);
,但是建议使用模块化语句,保持统一
css-loader
概要
github
地址:https://github.com/webpack/css-loader
- 安装命令:
npm install css-loader --save-dev
'Root-relative' urls
如果url以“/”开头,默认情况下不会转换,如:
url(/image.png) => url(/image.png)
可以使用root
参数统一设置,如:
loaders: [ { test: /\.css$/, loader: "style-loader!css-loader?root=." }, ... ]
结果:
url(/image.png) => require("./image.png")
Local scope
- 使用
:local
和:global
命令声明 - api中关于命令的描述没看明白,根据自己理解应该是,带括号的可以指定一行中的某一个class,不带括号的标识这行都是制定的模式。原文:
With :local (without brackets) local mode can be switched on for this selector. :global(.className) can be used to declare an explicit global selector. With :global (without brackets) global mode can be switched on for this selector.
- 不建议使用ID做样式的选择器,使用class替代ID,原文:
You can use :local(#someId), but this is not recommended. Use classes instead of ids
- css类的默认命名规则是
[hash:base64]
,可以自定义css类的命名规则,如:css-loader?localIdentName=[path][name]---[local]---[hash:base64:5]
- 可以使用
css-loader
的modules
参数修改为默认开启Local scoped
模式,如:css-loader?modules
压缩css
- 使用css-loader参数
minimize
压缩css文件的大小,格式如下:css-loader?minimize
问答
- 如何把css单独达成一个文件
- 答:使用插件:
ExtractTextPlugin
,配置如下var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
entry: {
main: "./src/index.js"
},
output: {
path: "./build",
filename: "[name].js",
publicPath: "http://cdn.example.com/[hash]/"
},
module: {
loaders: [
// 把css样式打包到js中
// {test: /\.css$/, loader: "style!css?localIdentName=[name]__[local]___[hash:base64:5]"},
// 把css样式单独成一个文件
{test: /\.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader?localIdentName=[name]__[local]___[hash:base64:5]")},
{test: /\.html$/, loader: "html"},
{ test: /[\.jpg|\.png]$/, loader: "file?name=[path][name].[ext]" }
]
},
plugins: [
new ExtractTextPlugin("[name].css")
]
}
- 答:使用插件:
关于 webpack 的研究的更多相关文章
- webpack+vue多入口环境搭建
项目地址:https://pan.baidu.com/s/1c1Dflp2 使用前提:安装nodejs环境,webpack的配置官网的例子跟着跑一遍,会vue开发 研究webpack+vue研究了一个 ...
- vue坑
项目地址:https://pan.baidu.com/s/1c1Dflp2 使用前提:安装nodejs环境,webpack的配置官网的例子跟着跑一遍,会vue开发 研究webpack+vue研究了一个 ...
- 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_09-webpack研究-webpack介绍
使用vue.js开发大型应用需要使用webpack打包工具,本节研究webpack的使用方法. 1.3.1 webpack介绍 Webpack 是一个前端资源的打包工具,它可以将js.image.cs ...
- 研究了一下 Webpack 打包原理,顺手挣了个 AirPods Pro
这些年,Webpack 基本成了前端项目打包构建的标配.关于它的原理和用法的文章在网上汗牛充栋,大家或多或少都看过一些.我也一样,大概了解过它的构建过程以及常用 loader 和 plugin 的配置 ...
- 深入研究webpack之Tree Shaking相关属性sideEffects用处
Tree Shaking我原来也只是了解,这次碰巧深入研究了下,就写个博客记录一下,网上有很多讲Tree Shaking的,我写的这篇跟他们侧重点不一样 Tree Shaking相关的基础知识 1 w ...
- webpack 3.X研究
目前webpack已经到了3.X版本,为了方便通过最新版本打包整个前端应用,现在开始对webpack操作进行简单介绍. 一.webpack安装 在安装webpack之前需要注意,webpack是通过n ...
- webpack集成vue单文件模式的很多坑(研究了1个星期)
1.一开始不知道局部安装webpack后,如何调用webpack. 后来看说明文档(webpack中文网)才知道,有个npx可以启动本地安装的webpack. 我估计:全局安装webpack,全局的w ...
- 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_12-webpack研究-webpack安装
npm默认安装配置的路径配置在nodejs的node_modules目录 j加上 -g 就是全局安装 后面只写webpack默认安装的是最新版本 指定版本号 视频中建议指定版本号进行安装
- 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_13-webpack研究-webpack入门程序
创建webpack测试的目录 定义webpack的入口文件 mdel01必须导出,main里面才能导入 导出多个 数组的写法 main是入口文件,里面已经引入了vue.min和model01.js ...
随机推荐
- rabbitmq 发送的用户名是什么
消费的用户名也必须是什么 接收必须单独启动线程——否则mfc会崩溃 Sleep(30000); //30秒 只要你打开消费队列,只消费1个 队列中所有数据都丢失???????? 断线重连: 知道答案 ...
- springboot不能用 @SpringApplicationConfiguraction 解决方案
@SpringApplicationConfiguraction 是在springboot 1.4之前,之后改用 @RunWith(SpringJUnit4ClassRunner.class) @S ...
- 【集群】JedisCluster 原理
1. JedisCluster类结构 JedisCluster是针对RedisCluster的java客户端,它封装了java访问redis集群的各种操作,包括初始化连接.请求重定向等.我们先来看下J ...
- C# ArrayList、HashSet、HashTable、List、Dictionary的区别
在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你 ...
- 木棍加工(dp,两个参数的导弹拦截问题)
题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: ...
- LA 3971 Assemble(二分)
题目: 给你b元钱,让你组装一台电脑,有n个配件,属性有 种类 名字 价格 品质,每种类型选至少一个,并且最小品质最大.输出这个最大的最小品质. 白书上说了,最小值最大的问题一般是二分来求解答案.在这 ...
- Android中软键盘弹出时关于布局的问题
当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入. 解决办法: 方法一:在你的activity中的oncre ...
- BZOJ 4619: [Wf2016]Swap Space(贪心)
传送门 解题思路 首先肯定是先处理\(b>a\)的,这样可以获得更多空间.处理时要先处理\(a\)比较小的,再处理\(a\)比较大的,因为要求最小值,而\(b>a\)的总量是确定的,那么就 ...
- Java方式bean的注入以及自动配置
Java配置 Java配置的本质上,就是使用一个Java类去代替xml配置,这种配置方式在目前最主流的Spring Boot中得到了广泛的使用.1.引入相关Spring相关依赖 2.创建Java配置类 ...
- (Java多线程系列七)Java内存模型和线程的三大特性
Java内存模型和线程的三大特性 多线程有三大特性:原子性.可见性.有序性 1.Java内存模型 Java内存模型(Java Memory Model ,JMM),决定一个线程对共享变量的写入时,能对 ...