安装 webpack

【 webpack3.0.0刚刚出来  因此文章是跟着低版本 教程 操做熟悉  结果好多对不上喔】css

什么是webpack? 他有什么优势?html

 

    首先对于不少刚接触webpack人来讲,确定会问webpack是什么?它有什么优势?咱们为何要使用它?带着这些问题,咱们来总结下以下:前端

 

    Webpack是前端一个工具,可让各个模块进行加载,预处理,再进行打包,它能有Grunt或Gulp全部基本功能。优势以下:node

 

  1. 支持commonJS和AMD模块。
  2. 支持不少模块加载器的调用,能够使模块加载器灵活定制,好比babel-loader加载器,该加载器能使咱们使用ES6的语法来编写代码。
  3. 能够经过配置打包成多个文件,有效的利用浏览器的缓存功能提高性能。
  4. 使用模块加载器,能够支持sass,less等处理器进行打包且支持静态资源样式及图片进行打包。
  5. 更多等等。。。带着这些问题咱们慢慢来学习webpack。

 

 一:前提是  必须安装  nodejsreact

  可经过cmd指令 查看是否安装node   webpack

    node --version 或者 node -vgit

    path   可查看环境变量github

二:如何安装和配置web

首先个人项目目录结构是:文件名叫webpack,里面只有一个main.html,代码以下:正则表达式

复制代码
<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="src/react.min.js"></script>
 </head>
 <body>
    <div id="content"></div>
    <script src="build/build.js"></script>
 </body>
</html>
复制代码

还有一个文件夹src,该文件夹存放了二个js文件;react.min.js源文件和main.js文件,main.js源码以下:

复制代码
/* 内容区模块代码 */
var ContentMode = React.createClass({
        render: function(){
            return (
                <div className="ContentMode">
                    <div class="contents">{this.props.contents}</div>
                    {this.props.children}
                </div>
            )
        }
});
/* 页面div封装 上面三个模块 */
var Page = React.createClass({
    render: function(){
        return (
            <div className="homepage">
                <ContentMode  contents ="longen">this is one comment</ContentMode >
                <ContentMode  contents ="longen2">this is two comment</ContentMode >
            </div>
            )
        }
});
/* 初始化到content容器内 */
React.render(
       React.createElement(Page,null),document.getElementById("content")
);
复制代码

该代码是React.js代码,是react.js入门学习一中的代码复制过来的 为了演示;

安装步骤以下:

  1. 生成package.json文件;

首先咱们须要在根目录下生成package.json文件,须要进入项目文件内根目录下执行以下命令:npm init

如上经过一问一答的方式后会在根目录下生成package.json文件,以下所示:

2 . 经过全局安装webpack

执行命令以下:npm install -g webpack 以下所示:

在c盘下会生成node_modules文件夹中会包含webpack,此时此刻咱们能够使用webpack命令了;

3. 配置webpack

每一个目录下都必须有一个webpack.config.js,它的做用就比如Gulpfile.js、或者 Gruntfile.js,就是一个项目配置,告诉webpack须要作什么。

以下是个人webpack.config.js代码以下:

复制代码
module.exports = {
  entry: "./src/main.js",
  output: {
    filename: "build/build.js"
  },
  module: {
    loaders: [
       //.css 文件使用 style-loader 和 css-loader 来处理
      { test: /\.css$/, loader: "style!css" },
      //.js 文件使用 jsx-loader 来编译处理
      { test: /\.js$/,    loader: "jsx-loader" }
    ]
  },
  resolve: {
    extensions: ['', '.js', '.jsx']
  },
  plugins: []
};
复制代码

entry 是页面中的入口文件,好比我这边的入口文件时main.js

output: 是指页面经过webpack打包后生成的目标文件放在什么地方去,我这边是在根目录下生成build文件夹,该文件夹内有一个build.js文件;

resolve: 定义了解析模块路径时的配置,经常使用的就是extensions; 能够用来指定模块的后缀,这样在引入模块时就不须要写后缀,会自动补全。

plugins: 定义了须要使用的插件,好比commonsPlugin在打包多个入口文件时会提取公用的部分,生成common.js;

module.loaders:是文件的加载器,好比咱们以前react须要在页面中引入jsx的js源码到页面上来,而后使用该语法,可是经过webpack打包后就不须要再引入JSXTransformer.js;看到上面的加载器;好比jsx-loader加载器就是表明JSXTransformer.js的,还有style-loader和css-loader加载器;所以在使用以前咱们须要经过命令把它引入到项目上来;所以须要以下命令生成下;

jsx-loader加载器 npm install jsx-loader --save-dev 以下:

Style-loader加载器 npm install style-loader --save-dev 以下:

css-loader 加载器 npm install css-loader --save-dev 以下:

局部安装webpack 执行命令:npm install webpack --save-dev

咱们这边干脆把gulp的全局安装和在项目中局部安装也安装下,稍后有用~

Gulp全局安装 npm install -g gulp 以下:

在项目文件内,gulp局部安装 使用命令 npm install gulp --save-dev 以下所示:

所以在咱们文件夹node_modules下生成文件以下:

如今咱们来执行命令 webpack; 以下所示:

 便可在根目录下生成一个build文件夹中build.js 以下所示:

咱们还能够使用以下命令:webpack --display-error-details 命令执行,这样的话方便出错的时候能够查看更详尽的信息;好比以下:

如今咱们再来刷新下页面;看到以下:

能够看到页面渲染出来了,咱们接着来看看页面中的请求:

能够看到只有一个文件react.min.js的源文件和build.js 咱们刚刚生成的build.js文件了,所以咱们经过webpack进行打包后,咱们如今就再也不须要和之前同样引入JSXTransformer.js了。咱们还能够看看build.js内生成了那些js,这里就不贴代码了,本身能够看看了~

上面是使用webpack打包;如今咱们再来看看使用第二种方案来打包~

使用gulp来进行打包

咱们知道使用gulp来打包的话,那么咱们须要在根目录下须要新建 Gulpfile.js;

所以咱们这边Gulpfile.js的源码以下:

复制代码
var gulp = require('gulp');
var webpack = require("gulp-webpack");
var webpackConfig = require("./webpack.config.js");

gulp.task('webpack', function () {
    var myConfig = Object.create(webpackConfig);
    return gulp
        .src('./src/main.js')
        .pipe(webpack(myConfig))
        .pipe(gulp.dest('./build'));
});

// 注册缺省任务
gulp.task('default', ['webpack']);
复制代码

而后webpack.config.js代码变为以下:

复制代码
module.exports = {
  entry: "./src/main.js",
  output: {
    filename: "build.js"
  },
  module: {
    loaders: [
       //.css 文件使用 style-loader 和 css-loader 来处理
      { test: /\.css$/, loader: "style!css" },
      //.js 文件使用 jsx-loader 来编译处理
      { test: /\.js$/,    loader: "jsx-loader" }
    ]
  },
  resolve: {
    extensions: ['', '.js', '.jsx']
  },
  plugins: []
};
复制代码

便可,而后再在命令行中输入gulp便可生成build/build.js了;以下所示:   【可是啊我本身是输入webpack才实现的!

Github上的代码以下: https://github.com/tugenhua0707/webpack/  本身能够把压缩包下载下来运行下便可。

 

三:理解webpack加载器

    Webpack提供了一套加载器,好比css-loader,less-loader,style-loader,url-loader等,用于将不一样的文件加载到js文件中,好比url-loader用于在js中加载png/jpg格式的图片文件,css/style loader用于加载css文件,less-loader加载器是将less编译成css文件;

配置加载器

复制代码
module.exports = {
  entry: "./src/main.js",
  output: {
    filename: "build/build.js",
    path: __dirname + '/assets/',
    publicPath: "/assets/"
  },
  module: {
    loaders: [
      {test: /.css$/, loader: 'style!css'},
      {test: /.(png|jpg)$/, loader: 'url-loader?limit=8192'}
    ]
  }
  resolve: {
extensions: ['', '.js', '.jsx'],
//模块别名定义,方便后续直接引用别名,无须多写长长的地址
alias: {
    a : 'js/assets/a.js',  // 后面直接引用 require(“a”)便可引用到模块
    b : 'js/assets/b.js',
    c : 'js/assets/c.js'
}
  },
  plugins: [commonsPlugin, new ExtractTextPlugin("[name].css")]
}
复制代码

module.loader: 其中test是正则表达式,对符合的文件名使用相应的加载器. 

/.css$/会匹配 xx.css文件,可是并不适用于xx.sass或者xx.css.zip文件.

url-loader 它会将样式中引用到的图片转为模块来处理; 配置信息的参数“?limit=8192”表示将全部小于8kb的图片都转为base64形式。

entry 模块的入口文件。依赖项数组中全部的文件会按顺序打包,每一个文件进行依赖的递归查找,直到全部模块都被打成包;

output:模块的输出文件,其中有以下参数:

filename: 打包后的文件名

path: 打包文件存放的绝对路径。

publicPath: 网站运行时的访问路径。

relolve.extensions: 自动扩展文件的后缀名,好比咱们在require模块的时候,能够不用写后缀名的。

relolve.alias: 模块别名定义,方便后续直接引用别名,无须多写长长的地址

plugins 是插件项;

 

 

 

未完待续:;;

相关文章
相关标签/搜索