webpack实践笔记(二)---添加 loaders

絮语闭包
• 阅读 6010

webpack实践笔记(二)--- add loaders

[源码地址]:( https://github.com/silence717... )

本篇文章基于分支step2,切换分支:git checkout step2

loader加载顺序

分了三个级别,preloaders,loaders,postloaders,分别代表前中后,三个处理状态。

添加es6 loader

创建一个es6的文件login.es6

// login.es6
let login = (username, password) => {
    if(username !== 'admin' || password !== '123') {
        console.log('incorrect login');
    } else {
        console.log('correct login');
    }
};

login('admin', '123');

需要使用es6,由于浏览器支持不够,我们必须使用babel转为es5的code。

安装babel相关的包:

npm install babel-core babel-loader babel-preset-es2015

创建babelrc文件,配置为:

{
  "presets": ["es2015"]
}

webpack-config.js中配置loader

module: {
    loaders: [
        {
            test: /\.es6$/,
            exclude: /node_modules/,
            loader: 'babel-loader'
        }
    ]
},
resolve: {
    extensions: ['', '.js', '.es6']
}

运行dev-server,看到文件成功执行,这时我们看到bundle.js中编译后的code为:

var login = function login(username, password) {
  if (username !== 'admin' || password !== '123') {}
};

login('admin', '456');

添加preloader,对js文件进行校验

我们习惯在项目中使用的是eslint,或者jslint也可以,看个人爱好。

安装eslint相关包

npm install eslint eslint-loader eslint-plugin-promise eslint-plugin-standard babel-eslint -D

创建.eslintrc文件,每个公司采用适合自己的规则。配置文件较大,可查看项目源码。

webpack-config.js中添加配置,在此我们采用preloader

preLoaders: [
    {
        test: /\.js$/,
        exclude: 'node_modules',
        loader: 'eslint-loader'
    }
]

重新启动,如果code中存在不符合规范的,webpack在编译时候就会出错,根据提示更改对应文件。

package.json中的scripts

我不能一直使用这么复杂的命令去启动,so 我们可以在package.json中配置一下scripts:

"scripts": {
    "start": "webpack-dev-server",
}

这样我们每次启动只需要执行 npm start 即可。

在此说明两点:

  • 1、 npm的start是一个特殊的脚本名称,在命令行中使用npm start就可以执行相关命令,如果对应的此脚本名称不是start,想要在命令行中运行时,需要这样用npm run {script name},如npm run dev.

  • 2、 window环境下不支持&连接命令执行,如:gulp & nodemon mock-server.js。

production vs dev

生产环境我们需要对js进行打包压缩,而dev环境我们希望使用源码便于调试。

// 生产环境 
webpack -d
// 开发环境
webpack -p

分别执行这两个命令,你可以看到bundle.js内容是不相同的,一个压缩一个未经压缩。

为了便于管理,我们创建一个webpack-bulid.config.js文件

var devConfig = require('./webpack.config');
module.exports = devConfig;

通常在开发环境我们会经常使用console.log,debug来进行代码调试,这些其实是不允许带入生产环境的。
尽管采用一系列限制,但是为了防患于未然,我们引入strip-loader包:

安装依赖包

npm install strip-loader -D

webpack-build.config.js配置strip-loader

var WebpackStrip = require('strip-loader');
var devConfig = require('./webpack.config');
var stripLoader = {
    test: [/\.js$/, /\.es6$/],
    exclude: /node_modules/,
    loader: WebpackStrip.loader('console.log', 'debug')
};
devConfig.module.loaders.push(stripLoader);
module.exports = devConfig;

设置webpack执行的配置文件

webpack --config webpack-build.config.js  -p

这个命令执行完之后,bundle.js就按照build中的的配置对代码进行了一系列合作。

说明: webpack --config 用于设置使用哪个配置文件做操作。

为了便于调试,我们全局安装一个http-server,用于启动我们的项目。

安装http-server

npm install http-server -g

运行

http-server

打开浏览器访问http://127.0.0.1:8080/,
此时打开 console,发现并没有任何东西输出,这就是strip-loader的作用。
再查看sources中的bundle.js为压缩后的文件。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
可莉 可莉
3年前
18个常用 webpack插件,总会有适合你的!
!(https://oscimg.oschina.net/oscnet/71317da0c57a8e8cf5011c00e302a914609.jpg)来源| https://github.com/Michaellzg/myarticle/blob/master/webpack/Plugin何为插
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
DevOps世界中的软件开发
!(https://oscimg.oschina.net/oscnet/f40e68cbfe8148deb00f040b4e917a0a.jpg)在整个软件开发过程中,开发人员通常需要花费大量时间来修复错误和漏洞,以便一切按计划进行交付。但是,通过DevOps实践,可以更轻松地管理和保护这些问题。这是由于以下事实:使用DevOps实践的软
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这