atool-build学习笔记:初识

原文地址:atool-build

atool-build 在刚接触react,还不知道 webpack 的时候,看到他一脸懵逼。

滚了两个月回来看看他,其实就是 webpack 的二次封装,将一些常用的配置方案集成起来,便于使用。

安装

$ npm install -g atool-build

配置 package.json

atool-build 要求 package.json 文件里面增加 entry 字段。

其实就是指定需要操作的文件,与webpack 中的 entry 配置功能相同。

"entry": {
    "index": "./src/pathToYourEntry.jsx",
    "another": "./src/anotherEntry.jsx"
}

执行构建

$ atool-build

执行 atool-build 操作相当于执行 webpack --config webpack.config.js

会将 packageentry 中指定的文件进行压缩混淆,针对每个文件会按文件名生成对应的 文件名.js文件与 文件名.css 文件,并且会生成 common.jscommon.css

参数

  • -o, --output-path<path> 指定构建后的输出路径

    • 默认是指定 dist 文件夹, atool-build -o aaa 设置后,会构建到 aaa 文件夹下
  • w, --watch [delpay] 是否监控文件变化,默认为不监控。

    • 默认构建一次就结束命名,开启监控 atool-build -w 后命令行会保持构建状态,并且在每次修改保持后会按最小差异再次构建文件。
    • 和热更新类似,我觉得热跟新就是在监控完成自动构建后,在帮我们做一次页面的更新,想想就觉得好牛逼。
  • --no-compress 不压缩代码。

    • 顾名思义,按文件导入状态整合代码,不做压缩处理。
  • --config [userConfigFile] 指定用户配置文件。默认为根目录下的 webpack.config.js 文件。这个配置文件不是必须的。

    • webpack 指定配置文件: webpack --config webpack.dev.config.js,同理, atool-build --config webpack.dev.config.js 达到同样的效果。
  • --devtool <devtool> 生成 sourcemap 的方法,默认为空,这个参数和 webpack 的配置一致。

    • 设置不同的构建模式, webpack 可以通过设置json配置的 sourcemap 属性来控制构建模式, atool-build 通过 atool-build --devtool source-map 来设置内部的 webpack.config.js 文件来达到此效果。
  • --hash 使用 hash 模式的构建, 并生成映射表 map.json。

    • 通过该命令构建出来的文件会在末尾加上 -hash值 可以来判断构建出来的 hash 按需处理构建文件。

webpack.config.js 配置举例

使用

对于一些有自定义需求的项目,要是希望进一步做一些配置,按照下面的流程:

  1. 运行命令 $ atool-build ;
  2. 检测当前文件夹是否有 webpack.config.js 文件;
  3. 要是没有则采用 atool-build 内置的 webpack 配置,要是有这个文件,则将内置的 webpack 配置对象传入进行处理,返回的对象作为实际的 webpack 对象。

也就是说,我们可以通过 webpack.config.js 将 atool-build 内置的 webpack 配置进一步进行处理(添加一些 loader,plugin 等),得到项目实际需要的效果。webpack.config.js 里有一个函数,会将内置的 webpack 配置对象作为参数,而这个函数的返回值会作为新的 webpack 配置对象。所以,我们只需要改变这个对象就可以完成个性化配置。比如,我们添加一个 DefinePlugin 来处理项目里面的预留值:

webpack.config.js

// 得到 webpack
var webpack = require('atool-build/lib/webpack');

module.exports = function(webpackConfig) {
  // 添加一个plugin
  webpackConfig.plugins.push(
    new webpack.DefinePlugin({
      __DEV__: JSON.stringify('true')
    });
  );
  // 返回 webpack 配置对象
  return webpackConfig;
};

内置对象

atool-build 内置了一个 webpack 配置对象,来满足一般项目的需求,主要功能为:

entry

package.json 中 entry 对应内容

output

默认为 dist 文件夹,每个 entry key 对应 key.js, common.js, key.css, common.css(如果没有样式文件则没有 css 文件)。比如:

{
  "entry":{
    "index":"./src/index.js"
  }
}

./dist:index.js, common.js, index.css, common.css

devtool

通过 atool-build --devtool devtool 得到,默认为 undefined

resolve

{
  modulesDirectories: ['node_modules', path.join(__dirname, '../node_modules')],
  extensions: ['', '.js', '.jsx'],
}

模块解析配置项,extensions 解析的后缀

resolveLoader

{
  modulesDirectories: ['node_modules', path.join(__dirname, '../node_modules')],
}

node

如果在 package.jsonbrowser 没有设置,则设置 child_process, cluster, dgram, dns, fs, module, net, readline, repl, tlsempty

loader

  • babel 处理 .js,.jsx 文件

    {
    presets: ['es2015', 'react', 'stage-0'],
    plugins: ['add-module-exports', 'typecheck'],
    }
    
  • css:处理 .css 文件

  • autoprefixer:给 css 属性设置浏览器前缀

  • less:处理 .less 文件,支持 less

  • url:处理 .woff, .woff2, .ttf, .svg, png, jpg, jpeg, gif 文件

  • file:处理 .eot 文件

  • json:处理 .json 文件

plugins

  • webpack.optimize.CommonsChunkPlugin: (打包成多个资源文件,可以有效利用缓存提升性能,做到文件按需加载)
  • extract-text-webpack-plugin:(独立出css样式,如果我们希望样式通过 <link> 引入,而不是放在 <style> 标签内)
  • webpack.optimize.OccurenceOrderPlugin: (按照引用程度来排序各个模块,引用的越频繁id就越短,达到减小文件大小的效果)

更多内容可见 getWebpackCommonConfig

注意点

  • 对于自定义添加的 loader,plugin等依赖,需要在项目文件夹中npm install 这些依赖。但不需要再安装 webpack 依赖,因为可以通过 require('atool-build/lib/webpack') 得到;
  • 可以通过 atool-build --config file 来指定需要用到的配置文件,默认是 webpack.config.js,要是找不到则使用内置的 webpack 配置。

上面涉及到的 webpack 的具体作用,基本闷逼状态,日后深入学习回来补上...囧 我估计可能很难补上了,到时候在写一篇 webpack 的学习笔记 _

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,662评论 7 110
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,125评论 7 35
  • 学习流程 参考文档:入门Webpack,看这篇就够了Webpack for React 一. 简单使用webpac...
    Jason_Zeng阅读 3,101评论 2 16
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,419评论 1 32