消息提示

注册成功!

确定 取消
用户名: 密码: 注册
留言系统> 学习笔记>nodejs/reactjs等框架及工具
标题:webpack学习 发帖时间:2017-06-21 17:29:11

乌托
webpack入门教程:http://www.jianshu.com/p/b95bbcfc590d

乌托
回复:webpack学习
2017-06-21 17:44:27
webpack.config.js配置详解 :
var webpack = require("webpack");
var commonsPlugin = new webpack.optimize.CommonsChunkPlugin("common.js");
  module.exports = {
     noParse:[/jquery/],//表示跳过jquery,不对其进行编译,这样可以提高打包的速度
     plugins:[
     commonsPlugin,
     //配置了NoErrorsPlugin插件,用来跳过编译时出错的代码并记录,使编译后运行时的包不会发生错误
     new webpack.NoErrorsPlugin()
     ],
     entry: {
         index:"./src/js/startup.js"
     },
    //入口文件输出配置
     output:{
         //path: 打包好的资源存放的位置
         path:"./js",
         //filename: 打包后的文件名
         filename: "[name].bundle.js"
     },
     // externals: {     //排除构建文件外
  //        "react": "React"
  //    },
     module: {
         //加载器配置
         //module.loaders 是最关键的一块配置。它告知 webpack 每一种文件都需要使用什么加载器来处理
        loaders:[
         {
           //用于匹配加载器支持的文件格式的正则表达式
            test: /.css$/,
            //多个加载器通过"!"连接,加载器是从右向左开始使用的
            //loader指定了要使用的加载器类型
            loader: "style-loader!css-loader"
        },
         {
         //配置信息的参数“?limit=8192”表示将所有小于8kb的图片都转为base64形式 (其实应该说超过8kb的才使用 url-loader 来映射到文件,否则转为data url形式)
              test: /.(png|jpg)$/,
              //加载器支持通过查询字符串的方式接收参数
               loader: "url-loader?limit=8192"
         },
         {
         //presets:指定哪些代码转换器将启用babel
             test: /.js$/, 
             loader: "babel-loader",
//exclude:/node_modules/,排除node_modules这个文件夹中的代码
//include:/(admin|consumer)//表示只针对这两个文件夹中的代码进行打包
//include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹)
             exclude:/node_modules/,
             query:{
             presets:["es2015","react"]
             }
         },
         {
             test: /.jsx$/, 
             //?表示加载器支持通过查询字符串的方式接收参数
            //!表示多个加载器之间通过"!"连接
             loader: "babel-loader!jsx-loader?harmony"
         }
         ]
     },
//文件解析配置
//会依次寻找不带后缀的文件,.js后缀文件以及.jsx后缀文件。先找到哪个是哪个
    resolve: { 
    extensions: ["", ".js", ".jsx"],//当requrie的模块找不到时,添加这些后缀
    root:"E:/myev/src",//绝对路径
    alias: {//别名配置

        }
     }
    }
 }

这里对Webpack的打包行为做了配置,主要分为几个部分:

plugins 是插件项(是一个数组):这里我们使用了一个 CommonsChunkPlugin 的插件,它用于提取多个入口文件的公共脚本部分,然后生成一个 common.js 来方便多页面之间进行复用。对于用到的插件,只需要将插件new出来放到数组中即可。
entry:指定打包的入口文件,每有一个键值对,就是一个入口文件
output:配置打包结果,path定义了输出的文件夹(即打包好的文件要放到哪里),filename则定义了打包结果文件的名称,filename里面的[name]会由entry中的键(这里是index)替换。publicPath:如果要使用webpack-dev-server(webpack配置服务器,端口号是8080)就需要配置(标明我们要从哪个地方获取打包好的文件)
externals:当我们想在项目中require一些其他的类库或者API,而又不想让这些类库的源码被构建到运行时文件中,这在实际开发中很有必要。此时我们就可以通过配置externals参数来解决这个问题。
resolve:定义了解析模块路径时的配置,常用的就是extensions,可以用来指定模块的后缀,这样在引入模块时就不需要写后缀了,会自动补全。比如 Hello.jsx 这样的文件就可以直接用 require(./Hello) 引用。 resolve 配置,配置查找模块的路径和扩展名和别名(方便书写)。可以用 alias 指定从非npm引入的库,如
jQuery:path.resolve(__dirname,"./bower_components/jquery/dist/jquery.js") , 
这样在 import 时可以替换引用路径。 
- module:定义了对模块的处理逻辑,这里可以用loaders定义了一系列的加载器,以及一些正则。当需要加载的文件匹配test的正则时,就会调用后面的loader对文件进行处理,这正是webpack强大的原因。比如这里定义了凡是.js结尾的文件都是用babel-loader做处理,而.jsx结尾的文件会先经过babel-loader处理,然后经过jsx-loader处理。当然这些loader也需要通过npm install安装,“-loader”其实是可以省略不写的,多个loader之间用“!”连接起来。
1下一页  第1页,共1页
回复

标题: 回复:webpack学习

内容:

发贴人: 游客