原创翻译,转载请注明出处。
原文地址:https://webpack.js.org/concepts/plugins/
你可能注意到极少有webpack配置文件看起来一模一样。这是因为webpack配置文件是一个能导出一个对象的JavaScript文件。Webpack根据它定义的属性来处理这个对象。
因为它是一个标准的Node.js CommonJS模块,所以你可以做一下事情:
- 通过require(…)来导入其他文件
- 通过require(…)来使用npm上的实用程序
- 使用JavaScript的控制流表达式,也就是?:操作符
- 对一些经常使用的值定义常量或者变量
- 作成并执行函数来生成一部分配置
可以适宜的使用这些特性。
你不应该做下面的事情。技术上可以使用它们,但是不推荐。
- 在使用webpack CLI时候,使用CLI参数(写你自己的CLI,或者使用–env)
- 输出一些不确定的值(调用webpack两次,应该产生同样的输出文件)
- 写一个很长的配置文件(可以把配置文件分割成几个文件)
下面的代码展示了怎样能使webpack配置文件既明了又丰富。
最简单的配置
webpack.config.js
var path =require('path'); module.exports ={ entry:'./foo.js', output:{ path: path.resolve(__dirname,'dist'), filename:'foo.bundle.js' } };
多个目标
var path =require('path'); var webpack =require('webpack'); var webpackMerge =require('webpack-merge'); var baseConfig ={ target:'async-node', entry:{ entry:'./entry.js' }, output:{ path: path.resolve(__dirname,'dist'), filename:'[name].js' }, plugins:[ newwebpack.optimize.CommonsChunkPlugin({ name:'inline', filename:'inline.js', minChunks:Infinity }), newwebpack.optimize.AggressiveSplittingPlugin({ minSize:5000, maxSize:10000 }), ] }; let targets =['web','webworker','node','async-node','node-webkit','electron-main'].map((target)=>{ let base =webpackMerge(baseConfig,{ target: target, output:{ path: path.resolve(__dirname,'dist/'+ target), filename:'[name].'+ target +'.js' } }); return base; }); module.exports = targets;
使用TypeScript
下面的例子我们使用TypeScript来作成一个类,Angluar-cli通过它可以生成配置文件。
webpack.config.ts
import* as webpackMerge from 'webpack-merge'; import{ CliConfig } from './config'; import{ getWebpackCommonConfig, getWebpackDevConfigPartial, getWebpackProdConfigPartial, getWebpackMobileConfigPartial, getWebpackMobileProdConfigPartial } from './'; exportclassNgCliWebpackConfig{ // TODO: When webpack2 types are finished let's replace all these any types // so this is more maintainable in the future for devs public config:any; private webpackDevConfigPartial:any; private webpackProdConfigPartial:any; private webpackBaseConfig:any; private webpackMobileConfigPartial:any; private webpackMobileProdConfigPartial:any; constructor(public ngCliProject:any,public target:string,public environment:string, outputDir?:string){ const config: CliConfig = CliConfig.fromProject(); const appConfig = config.config.apps[0]; appConfig.outDir = outputDir || appConfig.outDir; this.webpackBaseConfig =getWebpackCommonConfig(this.ngCliProject.root, environment, appConfig); this.webpackDevConfigPartial =getWebpackDevConfigPartial(this.ngCliProject.root, appConfig); this.webpackProdConfigPartial =getWebpackProdConfigPartial(this.ngCliProject.root, appConfig); if(appConfig.mobile){ this.webpackMobileConfigPartial =getWebpackMobileConfigPartial(this.ngCliProject.root, appConfig); this.webpackMobileProdConfigPartial =getWebpackMobileProdConfigPartial(this.ngCliProject.root, appConfig); this.webpackBaseConfig =webpackMerge(this.webpackBaseConfig,this.webpackMobileConfigPartial); this.webpackProdConfigPartial =webpackMerge(this.webpackProdConfigPartial,this.webpackMobileProdConfigPartial); } this.generateConfig(); } generateConfig():void{ switch(this.target){ case"development": this.config =webpackMerge(this.webpackBaseConfig,this.webpackDevConfigPartial); break; case"production": this.config =webpackMerge(this.webpackBaseConfig,this.webpackProdConfigPartial); break; default: thrownewError("Invalid build target. Only 'development' and 'production' are available."); break; } } }
使用JSX
下面的例子使用JSX(React JavaScript Markup)和Babel来作成一个webpack能理解的JSON配置文件。
import h from'jsxobj'; // example of an imported plugin const CustomPlugin = config =>({ ...config, name:'custom-plugin' }); exportdefault( <webpack target="web" watch> <entry path="src/index.js"/> <resolve> <alias {...{ react:'preact-compat', 'react-dom':'preact-compat' }}/> </resolve> <plugins> <uglify-js opts={{ compression:true, mangle:false }}/> <CustomPlugin foo="bar"/> </plugins> </webpack> );
-- End --
相关推荐
配置文件通常命名为webpack.config.js,在该文件中通过一个配置对象导出模块,该配置对象决定了打包器的行为。该配置对象可以包含多个属性,每个属性对应webpack的某个配置项,比如: - mode: 模式配置选项,可用于...
10. **其他**:如`package.json`(如果项目使用了前端构建工具如Webpack)或者`.gitignore`(定义了版本控制忽略的文件)等。 要深入学习这个项目,你需要先解压缩文件,然后根据README的指示设置环境,安装依赖,...
压缩包内的文件 "03-webpack的loader" 可能是一个配置文件、示例代码或者教程文档,详细介绍了如何配置和使用 Webpack Loader。通过阅读和理解这个文件,开发者可以更好地掌握如何根据项目需求定制 Webpack 的构建...
3. **配置文件**:`.config`或`.json`文件可能包含了项目配置,如数据源、图表设置等。 4. **库和框架**:项目可能引用了第三方JavaScript库,如D3.js、jQuery等,以增强功能和简化开发。 5. **示例或测试文件**:...
6. 编译或构建工具:对于更高级的作业,可能会涉及到Webpack、Gulp或Grunt等构建工具,用于自动化代码编译、压缩和优化过程。 7. 脚手架或模板文件:如果使用了像Create React App这样的脚手架,那么文件结构可能会...
4. `package.json`:项目配置文件,包含了依赖库信息、脚本命令等。 5. `README.md`:项目说明文档,可能会包含安装、使用、贡献指南等内容。 在开发和使用这个基于 Element 的组件库时,你可能需要了解以下知识点...
这个插件可以集成到Webpack的配置文件中,通过简单的配置就能实现JSDoc的自动化。 使用jsdoc-webpack-plugin的基本步骤如下: 1. 安装插件:在项目中运行`npm install --save-dev jsdoc webpack jsdoc-webpack-...
### webpack 官方中文文档知识点总结 #### 一、webpack简介 webpack是一个现代JavaScript应用程序的静态模块打包工具。它的核心功能在于构建一个依赖图(dependency graph),该图映射出项目所需的所有模块,并最终...
6. **配置文件**:项目中可能包含各种配置文件,如`.env`(环境变量)、`settings.py`(Python设置)或`webpack.config.js`(前端构建配置),它们定义了项目运行时的参数。 7. **源代码分析**:深入研究源代码,...
【压缩包子文件的文件名称列表】只给出了"HYZ-Web-Study-master",这意味着压缩包内可能包含了项目的所有文件和目录,如源代码文件、README文档、配置文件、测试文件等。具体的知识点可能包括: 1. **基础Web技术**...
- **起步**:创建一个基本的 Webpack 配置文件 `webpack.config.js`,并定义入口文件、输出文件等基本设置。 - **从 v1 迁移到 v2**:由于 Webpack 2 引入了一些新的特性和改进,因此从 v1 迁移到 v2 需要注意某些...
下面将详细介绍Webpack的核心概念、配置文件以及在这个简单示例中可能涉及的步骤。 **Webpack核心概念** 1. **入口(Entry)**:Webpack 打包过程从入口文件开始。在`webpack.config.js`中,你会看到定义入口的...
1. **教程文档**:这些可能是PDF、MD(Markdown)或其他格式的文档,详细解释了编程的基本概念,例如变量、控制结构、函数、数据结构等,并逐步引导读者理解并应用这些知识。 2. **代码示例**:为了帮助理解理论...
- 作为webpack的加载器,处理Vue组件文件,将模板、脚本和样式转换为可执行的JavaScript模块。 9. **key的作用**: - 在Vue的Diff算法中,`key`用于唯一标识每个节点,提高DOM更新效率。 10. **axios**: - 一...
8. **配置文件**:项目可能包含配置文件(如`.env`或`config.json`),用于设定运行时环境变量或应用设置。 9. **文档**:尽管源码本身能说明一部分功能,但高质量的源码通常伴随有清晰的API文档和README文件,帮助...
3. **配置文件**:设置游戏参数、难度级别、分辨率等信息的文本文件。 4. **构建脚本**:用于编译、打包和部署游戏的命令脚本,可能使用npm、gradle、webpack等工具。 5. **框架或库文件**:如Phaser、Unity Asset等...
可以通过官方文档获取安装指南。 - 下载与你的Jenkins版本相匹配的插件压缩包,本例中为"plugins"。 - 解压缩这个文件到Jenkins的安装目录下的`plugins`文件夹。通常,这个路径会是`/var/lib/jenkins/plugins`或`C...
- 创建一个名为`webpack.config.js`的配置文件,在其中定义打包规则。 - 基础配置通常包括入口(entry)、出口(output)以及loader等设置。 ### Webpack核心概念 #### Loader - **定义**:Loader是Webpack处理模块的...
在深入探讨这些文件之前,让我们先理解React的基本概念。React是由Facebook开发的一个用于构建用户界面的JavaScript库,尤其适用于构建单页应用。它专注于视图层,允许开发者声明式地构建可复用的组件。 **React.js...