热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

node升级命令_LaravelMix4升级说明与“排坑儿”指南

本篇是我们系列课程《Laravel5.7优雅实战入门:第二版》和《Laravel5.7&Vue2.x深度整合实战:第二版》的扩展阅读。想要更好的阅读体验

c11f2865e7e5b24affc874d19489d3ed.png
本篇是我们系列课程《Laravel5.7优雅实战入门:第二版》和《Laravel 5.7&Vue 2.x深度整合实战:第二版》的扩展阅读。
想要更好的阅读体验,请观看原文出处:Laravel Mix 4升级说明与“排坑儿”指南
在2019年1月份,laravel mix这个默认的前端资源管理工具,升级到了4.0版本,由于是刚刚升级,可能还存在很多的bug与报错,所以在此统一汇总解决一下。

(一)官方的新版本特性与好处:

  • 更快的编译速度
  • 更快的npm install安装速度
  • 背后依赖的webpack升级到了4
  • vue-loader升级到了15
  • Babel升级到了7
  • 自动的依赖抽离。如果你调用mix.extract()方法,不加任何参数,所有的组件依赖(你从node_modules/引入的任何第三方组件),就都会被自动地抽离出来
  • css的压缩(基于cssnano)选项可以进一步添加了
  • PostCSS的插件,可以在单独的调用中传到mix.sass/less/stylus()中了。这意味着如果需要的话,每次的mix.sass()调用,你都可以往里面添加独特的PostCSS plugins
  • JS的优化和压缩依赖,由原来的Uglify变为Terser
  • SASS的优化和压缩依赖,由原来的node-sass变为Dart Sass。这个变动会稍微增加编译的时间,好处是在npm install的时候,能更快、更稳定
  • 改进了Bebel配置的融合策略。现在可以覆写或更改任何Mix里提供的、默认的Babel插件(plugins)和预设(presets)了,只需要在项目根目录创建一个.babelrc文件即可

(二)如何从之前的版本升级到Mix 4

npm remove laravel-mix
npm install laravel-mix@^4.0.0 --save-dev

升级了以后,如果你遇到跟vue-template-compiler相关的问题,多半是因为vuevue-template-compiler的版本号要一模一样才行,当两个版本不一致时就会报mismatch的错误,所以只需要更新vuevue-template-compiler其中一个的版本号,让它跟另一个一致即可。

(三)注意事项

  • 如果你的项目重度使用了JS的动态引入(dynamic imports),可能你得等到下一年webpack 5发布后再更新。在那之前,这方面会存在一些已知的编译问题,而且无法修复。一旦webpack 5发布了,Mix也会随后更新。如果你还不懂JS的动态引入(dynamic imports),那么很可能这不会影响到你的项目。(传统上我们import后面加上字符来引入组件或其他的js文件,新近的js支持import()作为一个方法来调用组件,这样返回的就是一个Promise,方便做一些组件的延迟加载之类)
  • Sass支持现在是一个按需的组件了。在之前的版本里,Mix默认就带着node-sasssass-loader,不管你的项目是否真的需要sass编译。为了提高组件安装(npm installs)的时间,这两个sass相关的组件,就成了按需安装,也即只有当你使用到了mix.sass()命令,它们才会被自动安装。当你初次运行npm run dev,并且用到了sass()方法时,相应依赖就会被安装,存到dev-dependencies列表里。

(四)初次npm install或yarn install提示webpack-cli相关的错误

如果你是一个全新的项目,在初次执行npm installyarn install的时候,很有可能会出现如下类似的错误:

error ···mix-testnode_moduleswebpack-cli: Command failed.
Exit code: 1
Command: lightercollective
Arguments:
Directory: ···mix-testnode_moduleswebpack-cli
Output:
'lightercollective' is not recognized as an internal or external command,
operable program or batch file.

它会说webpack-cli命令失败,还说什么webpack-cli目录下的'lightercollective'找不到,这个的原因是到了webpack 4的时代,webpack和webpack-cli不再是一个组件了,原来它们是一块的,现在webpack-cli独立出来了,得单独安装一下:

yarn add webpack-cli

或者

npm install webpack-cli

一般这样之后,再执行npm installyarn install,就没问题了。如果安装了还有问题,那么可能你是老的项目或者老的环境,可能webpack的版本还不是4,就跟webpack-cli对应不起来了,期间还会涉及到全局的webpack和webpack-cli,以及本项目的webpack和webpack-cli之间的冲突,这种时候,如果你实在不愿意折腾,就干脆package.json里将laravel-mix的版本号改为3.0.0,然后再安装就得了

(五)ES模块的引入(JS组件的require或import)

由于vue-loader 15的更新,如果你在引入ES模块的时候使用了 CommonJS的格式,也即require()的方式,你就需要在后面追加上.default,例如这样:

Vue.component('example-component',
- require('./components/ExampleComponent.vue')
+ require('./components/ExampleComponent.vue').default
);

将原来require()的方式,转换成ES的import ... from '...'的方式,是更推荐的:

import ExampleComponent from './components/ExampleComponent.vue';Vue.component('example-component', ExampleComponent);

(六)由Node Sass 转到 Dart Sass

由Node Sass 转到 Dart Sass,虽然大同小异,但是编译期间你可能会遇到一些变化、或警告信息,你可以一点点地将报错解决掉,也可以自行切换回node-sass:

npm install node-sass
mix.sass('resources/sass/app.sass', 'public/css', {implementation: require('node-sass')
});

(七)Vue组件里的sass编译

如果你的项目里没有调用过mix.sass()方法,因为这样的话它就会自动安装sass相关的依赖,但是你只是在vue组件里的style标签上声明了lang="sass",那么你就需要单独安装node-sass 或 sass。 因为Mix无法知道你会在Vue组件里具体用哪个样式处理器,所以你得自行安装相应组件。

比如你可以这样

npm install node-sass sass-loader

或者

npm install sass sass-loader

同样的道理也适用于less和Stylus

(八)完全删掉了 fastSass() 和 standaloneSass() 两个方法

fastSass() 和 standaloneSass() 两个方法被完全移除了,后者只是前者的一个别名的方法而已。

为了提高只是需要编译css这部分人的性能需求,fastSass() 和 standaloneSass() 这两个方法可以将sass编译跟webpack的基本编译分离开来,但是呢,似乎对新手来说,这更容易让人困惑。升级后,你得将之前的mix.fastSass()改成mix.sass()

- mix.fastSass()
- mix.standaloneSass()
+ mix.sass()

(九)删掉了调用Mix时的.mix后缀属性

删掉了已被弃用的.mix属性,如果你的webpack.mix.js文件里有require('laravel-mix').mix,得改成require('laravel-mix'):

- require('laravel-mix').mix
+ require('laravel-mix')

(十)Babel 7的支持

Babel官方的插件命名空间有所改变,都统一改成了@babel名下。你需要更新package.json文件,将其中所有babel-plugin-[name]相关的如下更改:

- "babel-plugin-[name]": "6.x"
+ "@babel/plugin-[name]": "7.x"

如果你之前创建过.babelrc文件,那么在其中也相应更改:

- "plugins": ["babel-plugin-transform-object-rest-spread"]
+ "plugins": ["@babel/plugin-proposal-object-rest-spread"]

(十一)从Uglify 转到 Terser

如果你项目里有更改过之前Uglify的一些配置,比如通过Config.uglify = {},你就得改成Config.terser = {},具体的配置大部分都是一样的。

Terser配置API

webpack.mix.js:

mix.options({
- uglify: {
- uglifyOptions: {
+ terser: {
+ terserOptions: {warnings: true}}
});



推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讨论了为什么在main.js中写import不会全局生效的问题,并提供了解决方案。在每一个vue文件中都需要写import语句才能使其生效,而在main.js中写import语句则不会全局生效。本文还介绍了使用Swal和sweetalert2库的示例。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
author-avatar
sjf66355555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有