虽然公司有提供现成的脚手架工具,但是作为开发人员懂得必要的相关知识还是很重要的。这样有利于提高我们的开发效率,优化我们的代码。

关于npm scripts

什么是npm scripts

npm 允许在package.json文件里面,使用scripts字段定义脚本命令。

在我们工作的时候使用的npm start, npm build. 就是 npm 脚本命令。合理的使用npm脚本可以让我们避免输入一大串的繁琐命令。

我对start命令和build命令的理解

"scripts": {
"start": "webpack-dev-server --env=dev --open --host 192.168.1.84",
// webpack-dev-server 打开开发环境
// --env=dev 定义env变量为dev,用来区分生产环境和开发环境
// --open 自动在浏览器当中打开项目
// --host 192.168.1.84 使用ip地址打开项目,主要作用是可以用来让手机或者别人的电脑能够访问到开发环境的项目
"build": "webpack --env=prod --progress --profile --colors"
// webpack 打包命令
// --env=prod 定义env变量为prod,用来区分生产环境和开发环境
// --progress 显示打包进度
// profile 性能监控,输出性能数据
// --colors 让打包时的代码带点颜色 },

定制自己的npm脚本

比如我希望我的打包过程简单一点,我只想简单的打包,我不关心打包进度,也不关注性能,什么五颜六色的打包信息我更不care,这个时候我的npm scrpis可以写成这样。

"scripts": {
"liujp": "webpack --env=prod"
}

这个时候我可以执行我自己的npm scripts来打包我的项目了。

cmd当中输入:  npm run liujp

文档

npm scripts文档

利用webpack配置代理,解决跨域问题

在前后端分离的项目当中,常常碰到跨域问题。当只有开发环境存在跨域的时候我们完全可以不用麻烦到后端大佬。我们完全可以自己配置代理来解决这个问题。

devServer.proxy 的使用

这里我简单说下,具体的看文档进行详细了解。

devServer: {
proxy: {
'/': {
target: "http://192.168.1.84/test",
}
},
}

如上代码,进行这样简单的配置,当我在项目当中调用数据的时候

// 接口管理文件
const API = {
userInfo: "/userInfo"
}
module.exports = API;
// 项目文件
const API = require("api");
$http.get(api.userInfo).then(({data})=>{
console.log("获取用户数据===>",data)
})

如上,这样我们就可以获取到 http://192.168.1.84/test/userInfo 这个接口的数据了。

文档

webpack代理配置文档

配置常用的功能模块,提高开发效率

比如常用的网络请求模块 $http.js, 接口管理文件 api.js, 自己封装的常用工具方法类。

利用webpack给我们提供的插件ProvidePlugin可以减少我们频繁的引入这些模块,从而提高我们的开发效率,它可以使我们在用到配置模块的时候帮我们节省 import 的过程。

例如:

// webpack配置
plugins: [
new webpack.ProvidePlugin({
"api": path.resolve(__dirname,"../src/static/lib/api.js"),
"$http": path.resolve(__dirname,"../src/static/lib/http.js"),
"utils": path.resolve(__dirname,"../src/static/lib/utils.js")
})
],
// 项目当中使用,我们可以直接使用相关模块,而不需要引入, 这个操作webpack会默认帮我们做了
$http.get(api.test).then(({data})=>{
console.log(data)
})

文档

ProvidePlugin文档

使用resolve.alias简化我们的模块引入

在项目过程当中,文件的嵌套可能会十分复杂,导致引入的路径很长,这个时候,就可以使用这个api,来简化我们的代码。

webpack配置示例

...
resolve: {
extensions: ['.ts', '.js', '.json', '.jsx'], // 允许省略后缀
alias: {
"@": path.resolve(__dirname,"../src/components"), // 通用组件地址
}
}

项目当中使用

// 使用前的引入
import TestComponents from "../../../components/ExportComponents/TestComponents";
// 简化后
import TestComponents from "@/ExportComponents/TestComponents";

文档

resolve.alias文档

配置全局变量

当你需要全局变量的时候,可以使用DefinePlugin插件来配置。

使用场景,例如全局作用域 CONTEXT_PATH

具体看文档。

DefinePlugin

合理使用webpack提高开发效率的更多相关文章

  1. 如何利用 Visual Studio 自带工具提高开发效率

    Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...

  2. 成吨提高开发效率:Intellij Shortcuts精简子集与思维模式

    在线精简cheatsheet备查表:intellij.linesh.twGithub项目:intellij-mac-frequent-keymap Intellij的快捷键多而繁杂,从官方推荐的key ...

  3. 善用VS中的Code Snippet来提高开发效率

    http://www.cnblogs.com/anderslly/archive/2009/02/16/vs2008-code-snippets.html http://www.cnblogs.com ...

  4. 实用手册:130+ 提高开发效率的 vim 常用命令

    Vim 是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器.这里收录了130+程 ...

  5. 提高开发效率的 Eclipse 实用操作

    工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个“器”.本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分 ...

  6. 10 款提高开发效率的 jQuery/CSS3 组件

    前端开发是一项十分繁琐而又耗体力的工作,如何更有效率的开发我们的应用,很多人会选择适当地使用一些jQuery插件.今天就要给大家分享10款可以提高开发效率的jQuery/CSS3组件.部分插件可以下载 ...

  7. 能够提高开发效率的Eclipse实用操作

    工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个“器”.本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分 ...

  8. tomcat免重启随意更改java代码 提高开发效率

    转载:http://developer.51cto.com/art/201012/241243.htm 做为了一个java开发人员,总是为因为要增加一个类,或是增加删除一个方法,甚至修改一个小处代码而 ...

  9. 能够提高开发效率的 Eclipse 实用操作

    工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个“器”.本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分 ...

随机推荐

  1. zabbix mysql 迁移 增加分区

    1.zabbix mysql 目录清单 --basedir=/usr/local/web/mysql --datadir=/data/mysql --log-error=/data/mysql/sys ...

  2. 深入理解java虚拟机读书笔记1--java内存区域

    Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随 ...

  3. uncompressing linux .................................................后没反应解决办法

    编译kernel是的no machine record defined 错误,网上有一些解法,其实都是错误的,以讹传讹.不打算自己写,找到一篇还算靠谱的,转摘一下. 其根本原因是没有在 __proc_ ...

  4. python面试题之介绍一下Python中webbrowser的用法

    所属网站分类: 面试经典 > python 作者:外星人入侵 链接: http://www.pythonheidong.com/blog/article/13/ 来源:python黑洞网 www ...

  5. stark组件前戏(3)之django路由分发的本质include

    django路由分发的三种方式 方式一: from django.urls import re_path, include urlpatterns = [ re_path(r'^web/', incl ...

  6. 模拟:HDU1034-Candy Sharing Game

    解题心得: 1.直接模拟每一次分一半就行了,模拟过程,记录轮数,但是也看到有些大神使用的是链表,估计链表才是真的做法吧. 题目: Candy Sharing Game Time Limit: 2000 ...

  7. Redis实现之对象(二)

    列表对象 列表对象的编码可以是ziplist或者linkedlist,ziplist编码的列表对象使用压缩列表作为底层实现,每个压缩列表节点(entry)保存了一个列表元素.举个栗子,如果我们执行RP ...

  8. 【Keepalived+MySQL】MySQL双主互备+高可用

    一.基本信息说明 [DB1] IP: 192.168.102.144 hostname: LVS-Real1 [DB2] IP: 192.168.102.145 hostname: LVS-Real2 ...

  9. loj2042 「CQOI2016」不同的最小割

    分治+最小割 看到题解的第一句话是这个就秒懂了,然后乱七八糟的错误.越界.RE-- #include <algorithm> #include <iostream> #incl ...

  10. Asp.net自定义控件开发任我行(6)-嵌入资源下

    摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...