热门标签 | 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}}
});



推荐阅读
  • Vue应用预渲染技术详解与实践 ... [详细]
  • 深入探索Node.js新框架:Nest.js第六篇
    在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • 深入理解 Java 控制结构的全面指南 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 基于收支数据的聚类分析研究
    通过对收支数据进行聚类分析,研究发现聚类结果的解释和验证是关键步骤。为了确保分群的合理性和有效性,需要结合业务背景和实际需求,灵活选择合适的聚类数量。该研究利用Python中的Pandas和Matplotlib库对数据进行了预处理和可视化,为决策提供了科学依据。 ... [详细]
  • 如何在 Node.js 环境中将 CSV 数据转换为标准的 JSON 文件格式? ... [详细]
  • 在进行网络编程时,准确获取本地主机的IP地址是一项基本但重要的任务。Winsock作为20世纪90年代初由Microsoft与多家公司共同制定的Windows平台网络编程接口,为开发者提供了一套高效且易用的工具。通过Winsock,开发者可以轻松实现网络通信功能,并准确获取本地主机的IP地址,从而确保应用程序在网络环境中的稳定运行。此外,了解Winsock的工作原理及其API函数的使用方法,有助于提高开发效率和代码质量。 ... [详细]
  • 【前端开发】深入探讨 RequireJS 与性能优化策略
    随着前端技术的迅速发展,RequireJS虽然不再像以往那样吸引关注,但其在模块化加载方面的优势仍然值得深入探讨。本文将详细介绍RequireJS的基本概念及其作为模块加载工具的核心功能,并重点分析其性能优化策略,帮助开发者更好地理解和应用这一工具,提升前端项目的加载速度和整体性能。 ... [详细]
  • Linux磁盘管理入门指南:MBR分区格式详解与安装步骤
    在 CentOS 7.x 环境下,本文详细介绍了 MBR 分区格式的基本概念及其安装步骤。实验中使用了 SAS 和 SATA 硬盘,其中 SAS 硬盘主要用于企业级应用和服务器,而 SATA 硬盘则广泛应用于个人计算机和低端服务器。文章通过具体操作示例,帮助读者更好地理解和掌握 Linux 磁盘管理的基本技能。 ... [详细]
  • 个人学习进阶:深入解析Tomcat架构体系(第一部分)
    大家好,欢迎来到X的技术分享。近期我一直在深入研究Tomcat的架构体系,收获颇丰。作为一款广泛使用的应用服务器,Tomcat的架构设计非常精妙,对理解和优化Web应用具有重要意义。在本系列的第一部分中,我将详细解析Tomcat的核心组件及其工作原理,帮助读者建立坚实的基础。希望这些内容能为大家的学习和实践带来启发。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
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社区 版权所有