React.js学习笔记(20) ( ! Nodejs升级后npm全局安装模块出错相关总结 ) + match,location,history + ( webpack-bundle-analyzer包分析插件 ) + ( npm常用命令汇总 ) + ( babel-preset-env )

(一) Nodejs升级后遇到的问题

  • Nodejs升级后,npm 安装 cnpm报错,全局安装其他模块也报错
  • 解决以上报错的方法:
    把npm全局安装路径和缓存设置成默认路径,删掉C:\Users\xxx\AppData\Roaming\npm路径中的node_modules,然后从新安装cnpm和全局安装其他模块
    ( C:/Users/用户名/AppData里面默认有三个文件夹,分别是Local,LocalLow,Roaming,简单地来说,都是用来存放软件的配置文件和临时文件的 )
  • 解决需要了解的知识点:
(1) 查看npm配置
npm config list  // 查看基本配置 (重要)

npm config list -l //查看所有配置
(2) 本地安装 ( local )

npm install xxxx

(3) 全局安装 ( global )

npm install -g xxxx
npm install --global xxxx
npm的默认全局安装路径为:"C:\Users\xxx\AppData\Roaming\npm" 这里的xxx这里的xxx就要看你是什么电脑品牌了

  • 设置全局安装路径
设置npm全局安装路径

npm config set prefix "目录路径"


// 例如
// npm config set prefix "C:\Users\MR X6TI\AppData\Roaming\npm"  -- 注意这里路径一定要加引号
  • 查看全局安装路径
查看npm全局安装路径

npm config get prefix
(4) 缓存路径 ( cache )

npm的默认全局安装路径为:"C:\Users\xxx\AppData\Roaming\npm-cache" 这里的xxx这里的xxx就要看你是什么电脑品牌了

  • 设置缓存路径 cache
设置缓存路径

npm config set cache "目录路径"


// 例如
npm config set cache "C:\Users\MR X6TI\AppData\Roaming\npm-cache"  设置缓存文件夹

// -- 注意这里路径一定要加引号 
  • 查看缓存路径 cache
查看缓存路径 cache

npm config get cache
(5) npm bin

npm bin 命令显示相对于当前目录的,Node 模块的可执行脚本所在的目录(即 .bin 目录)。

npm bin


运行结果:
C:\Users\MR X6TI\node_modules\.bin

(官网api) https://www.npmjs.com.cn/cli/cache/
(详细) https://www.cnblogs.com/djlxs/p/5731955.html
(专栏) https://segmentfault.com/p/1210000009653830/read
https://www.cnblogs.com/mei1234/p/7606780.html













(一) npm常用命令汇总

  • 查看模块的当前版本号
npm view 模块名 version  ---------远程仓库中目前的版本号
 // 需要注意的是查看到的模块版本是该模块再远程仓库的版本号,并不是当前项目中所依赖的版本号。

 
npm list 模块名 version  ---------当前项目中使用的版本号
 // 查看当前项目中应用的某个模块的版本号的命令
  • 查看模块的历史版本
 npm view 模块名 versions
  • 检查包是否已经过时
 npm outdated

 // 此命令会列出所有已经过时的包,可以及时进行包的更新
 // outdated 是过时的意思
  • 更新node模块
 npm update 模块名

 // 当然你也可以update 该模块到指定版本
 npm update 模块名 @版本号  -----------指定版本


 // 如果安装到最新版本可以使用以下命令
 npm install 模块名@latest  -----------最新版本 
 

 // 如果当前的版本号为2.5.1,是没办法进行npm update 模块名 @2.3.1 将模块版本号变为2.3.1的,

 // 当然,你可以先uninstall,然后进行install @2.3.1

 // 或者直接覆盖安装
  • 卸载node模块
 npm uninstall 模块名


删除本地模块时你应该思考的问题:是否将在package.json上的相应依赖信息也消除?
npm uninstall 模块:删除模块,但不删除模块留在package.json中的对应信息
npm uninstall 模块 --save 删除模块,同时删除模块留在package.json中dependencies下的对应信息
npm uninstall 模块 --save-dev 删除模块,同时删除模块留在package.json中devDependencies下的对应信息

  • 创建package.json文件
 npm init
  • 查看npm的版本
npm -v

(二) npm的版本控制

  • npm包的版本号的格式X.Y.Z
    X为主版本号,只有更新了不向下兼容的API时进行修改主版本号 ( ^ )
    Y为次版本号,当模块增加了向下兼容的功能时进行修改 ( 波浪号 )
    Z为修订版本号,当模块进行了向下兼容的bug修改后进行修改
    1.修复bug,小改动,增加z
    2.增加了新特性,但仍能向后兼容,增加y
    3.有很大的改动,无法向后兼容,增加x
  • NPM依赖包版本号~和^和*的区别
版本号 X.Y.Z

脱字符(^)来限定所安装模块的主版本号
波浪号(~)是限定所安装模块的次要版本
星号  (*) 最新版本

------------------------------------

~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
* 这意味着安装最新版本的依赖包


推荐使用~,只会修复版本的bug,比较稳定

使用^ ,有的小版本更新后会引入新的问题导致项目不稳定,
比如:之前的weex老项目安装依赖后页面无法显示,修改依赖版本后才正常

使用*, 同样有上述问题
  • npm安装指定版本
npm install 模块名@版本号 

例如:cnpm install webpack@4.0.0 -D

https://www.cnblogs.com/penghuwan/p/6973702.html
https://www.cnblogs.com/blackgan/p/7828047.html

(三) match对象

(1) match 对象包含了 <Route path> 如何与 URL 匹配的信息,match对象中包含了以下参数:

  • path
这里的path,是 <Route path="/chat/:user" component={xxx} /> 中的path

即  path = '/chat/:user

在需要嵌套<Route/>的时候用到------ <Route path="path"  />
  • url
url是当前的url地址

比如:url:"/chat/5a885a36867c9c4570d8de66"

在需要使用<Link/>的时候会用到------<Link  to="url"/>
  • params
通过解析URL中动态的部分获得的键值对都被包含在这个对象中

比如:params:{user: "5a885a36867c9c4570d8de66"}
  • isExact
path 是否等于 pathname,当为true时,整个URL都需要匹配

比如:isExact:true
  • 当一个 Route 没有 path 时,它会匹配一切路径。一般404页面就用该方法。( 在有<Switch>标签,并且有Router没有path时,只要Switch中其他路由都没有命中,其他的地址都会带有没有path的Route

ReactDOM.render(
    <Provider store={store}>
        <BrowserRouter>
            <div>
                <AuthRoute></AuthRoute>
                <Switch>
                    <Route path="/bossinfo" component={BossInfo}></Route> 
                    <Route path="/geniusinfo" component={GeniusInfo}></Route>
                    <Route path='/register' component={Register}></Route> 
                    <Route path='/login' component={Login}></Route>
                    <Route path='/chat/:user' component={Chat}></Route>
                    <Route component={Dashboard}></Route> 
                    // 只要其他路由未命中,都会加载Dashboard路由组件
                </Switch>
            </div>
        </BrowserRouter>
    </Provider>
, document.getElementById('root'));
registerServiceWorker();

(2) this.props.match

  • 只要是路由组件,就可以在组件内部通过 this.props.match获得以上数据
  • 非路由组件,需要使用withRouter (match, history, location非路由组件都需要使用withRouter,通过this.props获得相关数据)
  • 对于history,除了用withRouter外,还可以用这几种方式去跳转路由-------如何使用history跳转路由(全):https://segmentfault.com/a/1190000011137828
withRouter


import {withRouter} from 'react-router-dom';

class authRoute extends React.Component {
 ...
}

export default withRouter(authRoute)

(四) location对象

(1) location对象中包含了以下参数:

  • hash:设置或返回从井号 (#) 开始的 URL(锚)。

  • search:设置或返回从问号 (?) 开始的 URL(查询部分)。

  • pathname:设置或返回当前 URL 的路径部分(路径部分)。

  • state:一个捆绑在这个地址上的object对象

  • key:唯一ID

  • - href:设置或返回完整的 URL。

  • - host:设置或返回主机名和当前 URL 的端口号。

  • - hostname:设置或返回当前 URL 的主机名。

  • - port:设置或返回当前 URL 的端口号。

  • - protocol:设置或返回当前 URL 的协议

    location对象

(2) location 对象不会发生改变,因此可以在生命周期的回调函数中使用 location 对象来查看当前页面的访问地址是否发生改变。这种技巧在获取远程数据以及使用动画时非常有用


componentWillReceiveProps(nextProps) {
  if (nextProps.location !== this.props.location) {
    // navigated!
  }
}

(五) history对象

(1) history对象中包含了以下参数:

  • location对象----history对象中有location对象,可变
  • go
  • goBack 返回-1
  • goForward 向前+1
  • push(location) 跳转到需要的路由,将新条目推入历史堆栈
  • replace(location) 替换历史堆栈上的当前条目
  • length 历史堆栈中的条目数量
  • action 当前动作(PUSH,REPLACE,或POP)

(2) history是可变的,因此请使用location对象获取地址,而不是history.location中获取地址

https://zhuanlan.zhihu.com/p/20799258?refer=jscss

(六) webpack-bundle-analyzer 包分析工具

  • 安装
cnpm install webpack-bundle-analyzer --save-dev
  • 使用:
在webpack.config.dev.js中


const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
  plugins: [
    new BundleAnalyzerPlugin()
  ]
}


使用 Webpack 编译之后,可视化的结果会被展示在http://localhost:8888/

webpack打包优化:https://segmentfault.com/a/1190000011138081
基于 Webpack 的应用包体尺寸优化:https://segmentfault.com/a/1190000008151173

(七) babel-preset-env

  • 替换之前所有babel-presets-es20xx插件
  • 当安装babel-preset-ws2015的时候,会提示安装babel-preset-env
  • 使用:

1.在babel配置文件中
{
"presets": ["env", "react", ...]
}
上面这个配置的作用和babel-prset-latest的作用一致也就是下面这个配置
{
"presets": ["latest"]
}



2.babel-preset-env可以设置一些选项,比如:
targets 指定运行环境
targets.node 指定node版本
targets.browsers 指定浏览器版本
modules 指定何种形式的模块,设置为false表示不转码模块



具体配置书写方式如下
{
"presets": [
    ["env",{
        "targets": {
            "chrome": 52,
            "browsers": ["last 2 versions","safari 7"]
        }
    }]
]
}

https://segmentfault.com/a/1190000010468759

https://segmentfault.com/a/1190000010657339#articleHeader7
https://segmentfault.com/a/1190000010174260

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

推荐阅读更多精彩内容