首页 前端知识 Vue中Export和Export default区别、dependency was not [email protected] in ./src/main.js及Unexpected token ‘<‘问题

Vue中Export和Export default区别、dependency was not [email protected] in ./src/main.js及Unexpected token ‘<‘问题

2024-05-19 09:05:35 前端知识 前端哥 398 210 我要收藏

一、Vue中Export和Export default区别

    现在Vue开发中每个vue文件中都会使用Export,而在ES6以前的js开发中是没有这些库的。在ES6前端要实现模块化需要借助第三方js库,而现在ES6自带模块化(在ES6中一个js文件代表一个js模块module),也是JS第一次支持module,可以直接用import和export在浏览器中导入和导出各个模块。

    ES6,全称ECMAScript 6.0,是JavaScript 的下一个版本标准,2015.06 发版。ES6主要是为了解决ES5的先天不足,比如JavaScript里并没有类的概念,ECMA是国际化标准组织(European computer manufactures association,欧洲计算机制造联合会),1996年11月JavaScript的创造者网景公司将JS提交给希望这种语言能够成为国际标准,随后ECMA发布了规定浏览器脚本语言的标准,即ECMAScript。直到今天我们一开始接触的普通JS开发就是在学ECMAScript3.0版的语法。目前浏览器的JavaScript是ES5版本,大多数高版本的浏览器也支持 ES6,不过只实现了 ES6 的部分特性和功能。浏览器对模块(module)支持程度不同, 目前都是使用babelJS, 或者Traceur把ES6代码转化为兼容ES5版本的js代码;

    在ES6中,一个模块内部的所有变量外部无法获取。如果要让外部读取模块内部的变量,就必须使用export关键字输出变量。export与export default均可用于导出常量、函数、文件、模块等,在其它文件或模块中用import导入。

#Export命令用于规定模块的对外接口。
//web.js 使用export写法1 
export var domainName = '007.cn';
export var author = 'kermit';

//web.js 使用export写法2
var domainName = '007.cn';
var author = 'kermit';
export {domainName, author};

    上面示例了两种export写法,这两种写法是等价的。ES6将代码文件web.js视为一个模块,并用export命令对外部输出了2个变量。export命令除了输出变量,还可以输出函数或类(class)。可见export可以在一个文件中使用多次。在一个文件或模块中,export、import可以有多个,export default仅有一个。import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(web.js)对外接口的名称相同。如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名。

import { domainName as domain } from './web.js';

    export default命令,为模块指定默认输出。与export命令的区别是其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。这时就不需要知道原模块输出的函数名。这时import命令后面,不使用大括号。因为export default命令其实只是输出一个叫做default的变量,所以它后面不能跟变量声明语句。

//webobj.js 
export default {
	domainName:'007.cn',
	author :'kermit',
}
//webobj.js引用直接使用随意命名为web
import web from './webobj';
web.domainName //'007.cn'

    总结:export命令对外接口有名称且import命令从模块导入的变量名与被导入模块对外接口的名称相同。而export default命令对外输出的变量名是任意的,这时import命令后面,不使用大括号。export default命令用于指定模块的默认输出,export default命令只能使用一次。export可以使用多次。

二、This dependency was not found:* @XXX.js in ./src/main.js

 一个在正常运行的vue项目,我下载下来代码后进行编译报错,内容如下:

This dependency was not found:* @/lib/commonStorage.js in ./src/main.js
To install it, you can run: npm install --save @/lib/commonStorage.js
<s> [webpack.Progress] 100%

    根据报错提示,然后在lib的目录下发现存在一个文件:CommonStorage.js,而在代码中main.js中导入的代码行如下:

import { commonStorage } from '@/lib/commonStorage.js'

    仔细看可发现大小写对不上,可以修改import这行代码,也可以修改文件名来解决,我这里发现遗留代码里其它多处也是使用的commonStorage.js小写开头,便对文件名进行了修改解决问题。但我疑惑的是大家用的同样的windows10系统,为什么之前的同事就正常跑起来着,没有进行更改呢。

其它几个Vue中遇到的报错:
1.报错:Expected exception block, space or tab after ‘//’ in comment spaced-comment
vue中的注释符号//后面一定要有空格。其它冒号后面也需要有空格
2.报错Trailing spaces not allowed  no-trailing-spaces
某个文件某一行出现多余的空格,把空格去掉就可以了
3.报错Strings must use single quote
注意要使用单引号
4. Unexpected template string expression
将单引号改为TAB键上面的符号

三、VUE二级路由刷新时报错Uncaught SyntaxError: Unexpected token '<' (at app.js:1:1)

    在使用vue搭建运行一个项目时,碰到一个奇怪的问题,从首页跳到二级页面的话页面能正常显示,但是在二级页面里刷新的时候页面就白屏了,然后在控制台中发现有报错: Uncaught SyntaxError: Unexpected token '<' (at app.js:1:1)  <!DOCTYPE html>。比如访问:http://127.0.0.1:4567/ 正常,从这个页面跳转到: http://127.0.0.1:4567/article/128 时也正常,但是在这个  http://127.0.0.1:4567/article/128 页面刷新时就不正常了。我的项目使用的是history模式。

    然后认真查看了一下页面的源代码,发现在二级页面刷新的时候加载的app.js路径不对,跟着二级页面的路由地址去寻找子目录下的app.js文件导致的。应该使用history模式在子路由刷新页面的话,主动引入的文件会以当前最终级路由的路径作为相对路径找。可以试着换路由模式,不过更好的方法是修改配置。

修改webpack.base.config.js 中build项的assetsPublicPath,将其设置为绝对路径,然后需要重新启动项目。

assetsPublicPath: '/'

转载请注明出处或者链接地址:https://www.qianduange.cn//article/8895.html
评论
会员中心 联系我 留言建议 回顶部
复制成功!