阮一峰之webpack-demos(译)

  最近因开始学ReactJS,发现ReactJS跟webpack这个模块化打包工具绝配,又开始找webpack的资料学。。。。。。在本尊千辛万苦的看了众多资料下,还是感觉阮大神写的这个demo简单明了,深入浅出,很适合新手学习,但是因为资料是全英文写的,自己在学习的过程中就顺当翻译了下,以下为原文地址链接 : https://github.com/ruanyf/webpack-demos#demo01-entry-file-source 

怎样使用


首先,全局安装 webpack 和 webpack-dev-server

$ npm i -g webpack webpack-dev-server

其次,克隆该版本库并安装依赖

$ git clone git@github.com:ruanyf/webpack-demos.git
$ cd webpack-demos
$ npm install

 现在,从版本库demo文件夹里资源文件开始

$ cd demo01
$ webpack-dev-server

 用你的浏览器打开http://127.0.0.1:8080

前言:Webpack是什么


 

Webpack是一个像Grunt和Gulp一样的前端构建系统

它类似Browserify,可被用作模块打包并且能够做的更多

$ browserify main.js > bundle.js
# be equivalent to
$ webpack main.js bundle.js

它的配置文件是Webpack.config.js

// webpack.config.js
module.exports = {
  entry: './main.js',
  output: {
    filename: 'bundle.js'
  }
};

在有Webpack.config.js之后,你能不输入任何参数调用Webpack

$ webpack

你应该知道一些命令行选项

  • webpack --------- 进行一次开发模式编译    
  • webpack -p  ----- 进行一次生产模式编译
  • webpack --watch  -------- 持续增量式监控编译
  • webpack -d ------- 生成source maps
  • webpack --colors   ------- 显示静态资源的颜色
  • webpack --display-error-details  ------- 显示更多报错信息

为了应用运行的准备,你能像下面那样写在你的package.json文件的scripts里

// package.json
{
  // ...
  "scripts": {
    "dev": "webpack-dev-server --devtool eval --progress --colors",
    "deploy": "NODE_ENV=production webpack -p"
  },
  // ...
}

索引


1.入口文件

2.多个入口文件

3.Babel加载器

4.CSS加载器

5.Image加载器

6.CSS模块

7.UglifyJs插件

8.HTML Webpack Plugin and Open Browser Webpack Plugin

Demo01:入口文件


入口文件是一个Webpack将准备编译为bundle.js的文件

例如:main.js是一个入口文件

// main.js
document.write('<h1>Hello World</h1>');

index.html

<html>
  <body>
    <script type="text/javascript" src="bundle.js"></script>
  </body>
</html>

Webpack按照配置文件编译成bundle.js

// webpack.config.js
module.exports = {
  entry: './main.js',
  output: {
    filename: 'bundle.js'
  }
};

运行服务器,浏览http://127.0.0.1:8080

$ webpack-dev-server 

Demo02:多个入口文件


允许多入口文件,它对于多页面app是有用的

// main1.js
document.write('<h1>Hello World</h1>');

// main2.js
document.write('<h2>Hello Webpack</h2>');

index.html

<html>
  <body>
    <script src="bundle1.js"></script>
    <script src="bundle2.js"></script>
  </body>
</html>

webpack.config.js

module.exports = {
  entry: {
    bundle1: './main1.js',
    bundle2: './main2.js'
  },
  output: {
    filename: '[name].js'
  }
};

Demo03:Babal-loader


加载器是一个能编译你app资源文件的预加载器。例如:Babel-loader能编译JSX/ES6文件为JS文件。官方文档有一个关于loaders的完整例子。

main.jsx

const React = require('react');
const ReactDOM = require('react-dom');

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.querySelector('#wrapper')
);

index.html

<html>
  <body>
    <div id="wrapper"></div>
    <script src="bundle.js"></script>
  </body>
</html>

webpack.config.js

module.exports = {
  entry: './main.jsx',
  output: {
    filename: 'bundle.js'
  },
  module: {
    loaders:[
      {
        test: /\.js[x]?$/,
        exclude: /node_modules/,
        loader: 'babel-loader?presets[]=es2015&presets[]=react'
      },
    ]
  }
};

 在webpack.config.js中,module.loaders领域被用于设定加载器。上面的片段用了babel-loader,它需求babel-preset-es2015和babel-preset-react插件来编译ES6和React.你也能采用另外一种方式设定babel查询选项

module: {
  loaders: [
    {
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: 'babel',
      query: {
        presets: ['es2015', 'react']
      }
    }
  ]
}

Demo04:CSS-loader


Webpack允许你在JS文件中require CSS , 然后用CSS加载器预加载CSS

main.js

require('./app.css');

app.css

body {
  background-color: blue;
}

index.html

<html>
  <head>
    <script type="text/javascript" src="bundle.js"></script>
  </head>
  <body>
    <h1>Hello World</h1>
  </body>
</html>

webpack.config.js

 

module.exports = {
  entry: './main.js',
  output: {
    filename: 'bundle.js'
  },
  module: {
    loaders:[
      { test: /\.css$/, loader: 'style-loader!css-loader' },
    ]
  }
};

 

 

此外:你必须用两个加载器来编译CSS文件。第一个是CSS-loader用来阅读CSS文件,另一个是Style-loader来插入Style标签到HTML页面中。不同的加载器靠感叹号标记链接(!)

在运行服务器以后,index.html将有一个内联样式表

<head>
  <script type="text/javascript" src="bundle.js"></script>
  <style type="text/css">
    body {
      background-color: blue;
    }
  </style>
</head>

 





















 

 

 

 

 


 
posted @ 2016-10-23 13:23  worldly1013  阅读(12326)  评论(0编辑  收藏  举报