单个入口(简写)语法
//单个入口,简写,字符串
module.exports = { entry: './path/to/my/entry/file.js', };
上面是单个入口的语法,是下面的简写:
// 单个入口,完整,对象类型
module.exports = { entry: { main: './path/to/my/entry/file.js', }, };
// 多个入口,数组。output到一个bundle.js
module.exports = { entry: ['./src/file_1.js', './src/file_2.js'], output: { filename: 'bundle.js', }, };
对象语法:扩展性好,比较繁琐
module.exports = { entry: { app: './src/app.js', adminApp: './src/adminApp.js', }, };
注:当你通过插件生成入口时,你可以传递空对象 {}
给 entry
。
描述入口的对象
有如下属性:
-
dependOn
: 当前入口所依赖的入口。它们必须在该入口被加载前被加载。 filename
: 指定要输出的文件名称。import
: 启动时需加载的模块library
: 指定 library 选项,为当前 entry 构建一个 libraryruntime
: 运行时 chunk 的名字。如果设置了,就会创建一个新的运行时 chunk。在 webpack 5.43.0 之后可将其设为false
以避免一个新的运行时 chunkpublicPath
: 当该入口的输出文件在浏览器中被引用时,为它们指定一个公共 URL 地址。请查看 output.publicPath
module.exports = { entry: { a2: 'dependingfile.js', b2: { dependOn: 'a2', import: './src/app.js', }, }, };
runtime
和 dependOn
不应在同一个入口上同时使用,所以如下配置无效,并且会抛出错误:
module.exports = { entry: { a2: './a', b2: { runtime: 'x2', dependOn: 'a2', import: './b', }, }, };
确保 runtime
不能指向已存在的入口名称,例如下面配置会抛出一个错误:
module.exports = { entry: { a1: './a', b1: { runtime: 'a1', import: './b', }, }, };
另外 dependOn
不能是循环引用的,下面的例子也会出现错误:
module.exports = { entry: { a3: { import: './a', dependOn: 'b3', }, b3: { import: './b', dependOn: 'a3', }, }, };
分离 app(应用程序) 和 vendor(第三方库) 入口
webpack.config.js
module.exports = { entry: { main: './src/app.js', vendor: './src/vendor.js', }, };
webpack.prod.js
module.exports = { output: { filename: '[name].[contenthash].bundle.js', }, };
webpack.dev.js
module.exports = { output: { filename: '[name].bundle.js', }, };
多页面应用程序:
module.exports = { entry: { pageOne: './src/pageOne/index.js', pageTwo: './src/pageTwo/index.js', pageThree: './src/pageThree/index.js', }, };
使用 optimization.splitChunks
为页面间共享的应用程序代码创建 bundle。由于入口起点数量的增多,多页应用能够复用多个入口起点之间的大量代码/模块,从而可以极大地从这些技术中受益
输出(output)
注意,即使可以存在多个 entry
起点,但只能指定一个 output
配置。
在 webpack 配置中,output
属性的最低要求是,将它的值设置为一个对象,然后为将输出文件的文件名配置为一个 output.filename
:
module.exports = { output: { filename: 'bundle.js', }, };
此设置输出bundle.js到dist目录
多个入口起点
多个入口时,output的filename使用‘占位符’ 来确保唯一命名
module.exports = { entry: { app: './src/app.js', search: './src/search.js', }, output: { filename: '[name].js', path: __dirname + '/dist', }, }; // 写入到硬盘:./dist/app.js, ./dist/search.js
高级进阶
以下是对资源使用 CDN 和 hash 的复杂示例:
module.exports = { //... output: { path: '/home/proj/cdn/assets/[fullhash]', publicPath: 'https://cdn.example.com/assets/[fullhash]/', }, };
如果在编译时,不知道最终输出文件的 publicPath
是什么地址,则可以将其留空,并且在运行时通过入口起点文件中的 __webpack_public_path__
动态设置。
__webpack_public_path__ = myRuntimePublicPath; // 应用程序入口的其余部分
原文:https://webpack.docschina.org/concepts/entry-points/
标签:exports,入口,js,webpack,module,entry,output From: https://www.cnblogs.com/withheart/p/17929569.html