`

[译]webpack官网文档 :概念 -- 6.配置文件

阅读更多

原创翻译,转载请注明出处。 

原文地址: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

下面的例子使用JSXReact 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 --

 

0
0
分享到:
评论

相关推荐

    Webpack4中文手册(4.39.3).pdf

    配置文件通常命名为webpack.config.js,在该文件中通过一个配置对象导出模块,该配置对象决定了打包器的行为。该配置对象可以包含多个属性,每个属性对应webpack的某个配置项,比如: - mode: 模式配置选项,可用于...

    Laravel开发-laravel-jos .zip.zip

    10. **其他**:如`package.json`(如果项目使用了前端构建工具如Webpack)或者`.gitignore`(定义了版本控制忽略的文件)等。 要深入学习这个项目,你需要先解压缩文件,然后根据README的指示设置环境,安装依赖,...

    03-webpack的loader.rar

    压缩包内的文件 "03-webpack的loader" 可能是一个配置文件、示例代码或者教程文档,详细介绍了如何配置和使用 Webpack Loader。通过阅读和理解这个文件,开发者可以更好地掌握如何根据项目需求定制 Webpack 的构建...

    big-data-view-master.zip

    3. **配置文件**:`.config`或`.json`文件可能包含了项目配置,如数据源、图表设置等。 4. **库和框架**:项目可能引用了第三方JavaScript库,如D3.js、jQuery等,以增强功能和简化开发。 5. **示例或测试文件**:...

    8b98-17132656-50895.zip

    6. 编译或构建工具:对于更高级的作业,可能会涉及到Webpack、Gulp或Grunt等构建工具,用于自动化代码编译、压缩和优化过程。 7. 脚手架或模板文件:如果使用了像Create React App这样的脚手架,那么文件结构可能会...

    ac-actor-master.zip

    4. `package.json`:项目配置文件,包含了依赖库信息、脚本命令等。 5. `README.md`:项目说明文档,可能会包含安装、使用、贡献指南等内容。 在开发和使用这个基于 Element 的组件库时,你可能需要了解以下知识点...

    前端开源库-jsdoc-webpack-plugin

    这个插件可以集成到Webpack的配置文件中,通过简单的配置就能实现JSDoc的自动化。 使用jsdoc-webpack-plugin的基本步骤如下: 1. 安装插件:在项目中运行`npm install --save-dev jsdoc webpack jsdoc-webpack-...

    webpack 官方中文文档.pdf

    ### webpack 官方中文文档知识点总结 #### 一、webpack简介 webpack是一个现代JavaScript应用程序的静态模块打包工具。它的核心功能在于构建一个依赖图(dependency graph),该图映射出项目所需的所有模块,并最终...

    Fly-the-Serenity-源码.rar

    6. **配置文件**:项目中可能包含各种配置文件,如`.env`(环境变量)、`settings.py`(Python设置)或`webpack.config.js`(前端构建配置),它们定义了项目运行时的参数。 7. **源代码分析**:深入研究源代码,...

    HYZ-Web-Study-master.zip

    【压缩包子文件的文件名称列表】只给出了"HYZ-Web-Study-master",这意味着压缩包内可能包含了项目的所有文件和目录,如源代码文件、README文档、配置文件、测试文件等。具体的知识点可能包括: 1. **基础Web技术**...

    Webpack2 中文文档 pdf

    - **起步**:创建一个基本的 Webpack 配置文件 `webpack.config.js`,并定义入口文件、输出文件等基本设置。 - **从 v1 迁移到 v2**:由于 Webpack 2 引入了一些新的特性和改进,因此从 v1 迁移到 v2 需要注意某些...

    webpackdemo只打包js、css

    下面将详细介绍Webpack的核心概念、配置文件以及在这个简单示例中可能涉及的步骤。 **Webpack核心概念** 1. **入口(Entry)**:Webpack 打包过程从入口文件开始。在`webpack.config.js`中,你会看到定义入口的...

    code-roadmap-main.zip

    1. **教程文档**:这些可能是PDF、MD(Markdown)或其他格式的文档,详细解释了编程的基本概念,例如变量、控制结构、函数、数据结构等,并逐步引导读者理解并应用这些知识。 2. **代码示例**:为了帮助理解理论...

    vue面试题-前端程序员必备-前端框架-大厂面试准备.docx

    - 作为webpack的加载器,处理Vue组件文件,将模板、脚本和样式转换为可执行的JavaScript模块。 9. **key的作用**: - 在Vue的Diff算法中,`key`用于唯一标识每个节点,提高DOM更新效率。 10. **axios**: - 一...

    Awais-18-源码.rar

    8. **配置文件**:项目可能包含配置文件(如`.env`或`config.json`),用于设定运行时环境变量或应用设置。 9. **文档**:尽管源码本身能说明一部分功能,但高质量的源码通常伴随有清晰的API文档和README文件,帮助...

    小游戏源码-蜘蛛spider aircraft.rar

    3. **配置文件**:设置游戏参数、难度级别、分辨率等信息的文本文件。 4. **构建脚本**:用于编译、打包和部署游戏的命令脚本,可能使用npm、gradle、webpack等工具。 5. **框架或库文件**:如Phaser、Unity Asset等...

    无网、内网服务器 jenkins搭建 (2.328版本)全部插件 离线下载

    可以通过官方文档获取安装指南。 - 下载与你的Jenkins版本相匹配的插件压缩包,本例中为"plugins"。 - 解压缩这个文件到Jenkins的安装目录下的`plugins`文件夹。通常,这个路径会是`/var/lib/jenkins/plugins`或`C...

    Webpack中文手册 pdf

    - 创建一个名为`webpack.config.js`的配置文件,在其中定义打包规则。 - 基础配置通常包括入口(entry)、出口(output)以及loader等设置。 ### Webpack核心概念 #### Loader - **定义**:Loader是Webpack处理模块的...

    react.js、react-dom.js、babel.js文件包下载

    在深入探讨这些文件之前,让我们先理解React的基本概念。React是由Facebook开发的一个用于构建用户界面的JavaScript库,尤其适用于构建单页应用。它专注于视图层,允许开发者声明式地构建可复用的组件。 **React.js...

Global site tag (gtag.js) - Google Analytics