webpack package code into different bundle
Demo4操作手册
本Demo演示如何进行分块打包等较高级的使用
准备环境
初始化环境, cd到demo1目录之后, 执行如下命令:
npm init -y
npm install webpack webpack-cli webpack-dev-server typescript ts-loader -D
新建tsconfig.json, 内容如下:
{
"compilerOptions": {
"target": "es5"
}
}
添加npm命令到package: ‘webpack-dev-server --open’.
L7 require.ensure
当一个应用的代码很多的时候, 我们把所有的代码都打包到一个文件, 似乎显得有点臃肿, 同时考虑到首页加载性能等其他原因, 按照一定规则把代码分开打包是很有必要的.
Webpack会使用require.ensure来定义各个分离的节点.
单个文件分离
在src目录下创建library1.ts和index.ts, 内容如下:
// library1.ts
export class Library {
hi() {
console.log('I\'m Library1.')
}
}
// index.ts
require.ensure(['./library1.ts'], function (require) {
var lib = require('./library1');
const ins = new lib.Library();
ins.hi();
});
新建webpack.config.js, 内容如下:
module.exports = {
entry: './src/index.ts',
output: {
filename: 'output.js'
},
resolve: {
extensions: ['.ts', '.js']
},
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader'
}
]
}
}
执行webpack即可打包成功, 可以看到dist目录下有output和1.output两个文件.
多个文件分离
在之前文件的基础上新建library2.ts和library3.ts, 内容如下:
// library2.ts
export class Library {
hi() {
console.log('I\'m Library2.')
}
}
// library3.ts
export class Library {
hi() {
console.log('I\'m Library3.')
}
}
修改index.ts内容如下:
require.ensure(['./library1.ts'], function (require) {
var lib = require('./library1');
const ins = new lib.Library();
ins.hi();
});
require.ensure(['./library2.ts', './library3.ts'], function (require) {
var lib2 = require('./library2');
const ins2 = new lib2.Library();
ins2.hi();
var lib3 = require('./library3');
const ins3 = new lib3.Library();
ins3.hi();
});
执行webpack即可打包成功, 可以看到dist目录下有output、1.output和2.output三个文件.
放到浏览器去执行可以看到library2和library3打包进了1.output, 而library1打包进了2.output.
L8 bundle-loader
bundle-loader其实只是对require.ensure做了一个封装, 原理还是一样的, 安装:
npm install bundle-loader -S
修改webpack.config.js如下:
module.exports = {
entry: './src/bundle.ts',
output: {
filename: 'output.js'
},
resolve: {
extensions: ['.ts', '.js']
},
module: {
rules: [
{
test: /\.ts$/,
use: [
{
loader: 'bundle-loader'
}, {
loader: 'ts-loader'
}
]
}
]
}
}
在src目录新建bundle.ts, 内容如下:
require('./library1')(lib => {
const ins = new lib.Library();
ins.hi();
});
require('./library2')(lib => {
const ins = new lib.Library();
ins.hi();
});
require('./library3')(lib => {
const ins = new lib.Library();
ins.hi();
});
打包结果是library的1、2、3分别打包进了output的2、3、4.
L9 SplitChunksPlugin
当我们多个打包文件依赖同一个包时, 如果不是把所有包都分开打包, 那么很多被依赖的包可能被重复打包进其他的包, 这是时候就需要对公共代码进行单独打包了.
实际上之前各种资料介绍的都是CommonsChunkPlugin, 而她从V4开始已经被移除了, 所以下面介绍SplitChunksPlugin的使用.
实际上这一步我没有完成, 后面有时间再继续更新吧......
webpack package code into different bundle的更多相关文章
- E: The package code needs to be reinstalled, but I can't find an archive for it.
ubuntu安装软件时报错: E: The package code needs to be reinstalled, but I can't find an archive for it. 解决方法 ...
- 20、uwp打包失败(All app package manifests in a bundle must declare the same values under the XPath *[local-name()='Package']/*[local-name()='Dependencies'])
在给 uwp工程打商店包的时候,遇到了一个异常: Error info: error 80080204: All app package manifests in a bundle must decl ...
- webpack 和 code splitting
Code Splitting指的是代码分割,那么什么是代码分割,webpack和code splitting又有什么样的联系呢? 使用npm run dev:"webpack-dev-ser ...
- webpac4k运行webpack .\src\main.js .\dist\bundle.js打包出错
打包的命令格式:webpack 要打包的文件的路径 打包好的输出文件的路径 运行webpack .\src\main.js .\dist\bundle.js 提示错误,错误信息如下: WARNING ...
- webpack的code spliting与chunks
webpack的code spliting与chunks :https://blog.csdn.net/liuqi332922337/article/details/53020992
- Vue脚手架创建项目出现 (Failed to download repo vuejs-templates/webpack: Response code 404)
搭建好(脚手架2.X版本)环境像往常一样使用vue init webpack xxxx 创建项目可以是没多久就开始报错了 报错结果就是:vue-cli · Failed to download rep ...
- 解决 webpack .\src\main.js .\dist\bundle.js 错误
打包的命令格式:webpack 要打包的文件的路径 打包好的输出文件的路径 栗子: webpack .\src\main.js .\dist\bundle.js 提示错误,错误信息如下: 错误原因 w ...
- vue+webpack+VS Code入门简单的项目配置
为了方便,这边的编译器选择的是VS Code (Visual Studio Code); 打开VS Code,选择好自己的工作空间,然后新建一个文件夹作为我们项目的文件夹,然后,show time: ...
- webpack 利用Code Splitting 分批打包、按需下载
webpack中的解决方案——Code Splitting,简单来说就是按需加载(下载),如果是requireJS对应的AMD的方案中这本是在正常不过了.但是在webpack中All in one的思 ...
随机推荐
- shell脚本编程之变量简介及脚本执行过程
脚本变量简介 变量类型:字符型.数值型.真.假:事先确定数据的存放格式和长度: 变量存放在内存空间: 编译型语言,没有额外的处理逻辑,属于强类型语言: 脚本型语言,可以有解释器控制:所以,可以是弱类型 ...
- Pytest权威教程06-使用Marks标记测试用例
目录 使用Marks标记测试用例 在未知标记上引发异常: -strict 标记改造和迭代 返回: Pytest权威教程 使用Marks标记测试用例 通过使用pytest.mark你可以轻松地在测试用例 ...
- mpvue开发坑点总结
最近一直在开发微信小程序,趁着空闲时间总结下使用情况. 现在项目目前使用的是 mpvue:^1.0.11 版本,后续看看更新情况. 文档在此: http://mpvue.com/mpvue/#_2 # ...
- 中山纪中集训Day2又是测试(划水)
A组T1 bzoj 2674 Attack Description chnlich 非常喜欢玩三国志这款游戏,并喜欢用一些策略出奇制胜.现在,他要开始征服世界的旅途了.他的敌人有N 座城市和N 个太守 ...
- Anaconda3自带jupyter
1.cmd命令行中输入 JupyterNotebook 2.系统自动调起下面页面(注册端口冲突是打不开的)
- win10 eclipse连接虚拟机ubuntu中的hdfs
1.eclipse安装连接hadoop的插件hadoop-eclipse-plugin-2.6.0(注意自己hadoop的版本) 将该插件放在eclipse安装路径的plugins文件夹中. ps:我 ...
- 【转】JVM类装载机制的解析,热更新的探讨(二)
同样,一个Class对象必须知道自己的超类.超级接口.因此,Class对象会引用自己的超类和超级接口的Class对象.这种引用一定是实例引用.(实际上,超类.超级接口的引用也存储在常量池中,但为了区分 ...
- 随机森林算法OOB_SCORE最佳特征选择
RandomForest算法(有监督学习),可以根据输入数据,选择最佳特征组合,减少特征冗余:原理:由于随机决策树生成过程采用的Boostrap,所以在一棵树的生成过程并不会使用所有的样本,未使用的样 ...
- Windows平台上运行Tomcat
从之前的学习中知道,可以调用Bootstrap类将Toomcat作为一个独立的应用程序来运行,在Windows平台上,可以调用startup.bat批处理文件来启动Tomcat,或运行shutdown ...
- graph embedding 之 struc2vec
在现实的网络中,构成网络的每个节点可能在网络中担任着某种角色.比如社交网络中,经常可以看见一些关注量很高的大V.两个大V在网络中的角色可能相同,因为他们都有很高的关注量:而大V与普通人(仅有几个关注) ...