当执行 import vue from ‘vue’ 时发生了什么?

平时开发中,经常会用到这样一个语句:

import Vue from 'vue';

由于浏览器兼容性问题,通常这个语法是在 webpack 的构建流搭建的项目中执行的,那么这个语句到底做了什么呢?

其实在 nodejs 中,执行 import 就相当于执行了 require ,而 require 被调用,其实会用到 require.resolve 这个函数来查找包的路径,而这个函数在 nodejs 中会有一个关于优先级的算法。先看一下 import Vue from 'vue' 这一句做了什么:

  1. import Vue from 'vue' 解析为 const Vue = require('vue') 。
  2. require 判断 vue 是否未 nodejs 核心包,如我们常用的:path,fs 等,是则直接导入,否则继 续往下走。
  3. vue 非 nodejs 核心包,判断 vue 是否未 '/' 根目录开头,显然不是,继续往下走。
  4. vue 是否为 './'、'/' 或者 '../' 开头,显然不是,继续往下走。
  5. 以上条件都不符合,读取项目目录下 node_modules 包里的包。 到了第五步, import Vue from 'vue' 就找到了 vue 所在的实际位置了

那么问题来了, node_modules 下的 vue 是一个文件夹,而引入的 Vue 是一个 javascript 对象,那它是怎么取到这个对 象呢?

其实对于一个 npm 包,内部还有一个文件输出的规则,先看下 node_modules/vue 下的文件结构是怎么样的:

├── LICENSE
├── README.md
├── dist
├── package.json
├── src
└── types

是不是看起来很笼统,其实对于 npm 包, require 的规则是这样的:

1. 查找 package.json 下是否定义了 main 字段,是则读取 main 字段下定义的入口。

2. 如果没有 package.json 文件,则读取文件夹下的 index.js 或者 index.node。

3. 如果都 package.json、index.js、index.node 都找不到,抛出错误 Error: Cannot find module 'some-library' 。

那么看一下 vue 的 package.json 文件有这么一句:

{
...
"main": "dist/vue.runtime.common.js",
...
}

到这里就很清晰了:

import vue from 'vue';
// 最后转换为
const vue = require('./node_modules/vue/dist/vue.runtime.common.js');

而 vue.runtime.common.js 文件的最后一行是: module.exports = Vue; ,就正好跟我们平时使用时 的 new Vue({}) 是一致的,这就是 import vue from 'vue' 的过程了。

当然,这个是我们平时使用得最多的导入方式,还有其他一些导入规则,都可以在 nodejs 的文档 中找到。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误通常是由于在你的 JavaScript 代码中没有正确引入 Vue.js 库导致的。请确保你已经在 HTML 中引入了 Vue.js 的脚本文件,或者使用了一个支持 ES6 模块的构建工具(如 Webpack)来正确地导入 Vue.js。 另外,还要检查是否重复引入了 Vue.js 。 ### 回答2: 在使用Vue进行开发,遇到“import vue from vue报错”这个错误,可能有多种原因导致。以下是可能的解决措施: 1. 检查Vue是否已安装:错误提示可能是由于没有正确安装Vue导致的。在终端中输入“npm install vue”或“yarn add vue”命令,安装最新版本的Vue,再重新运行代码。 2. 检查导入语句是否正确:在导入Vue,应该使用以下语句:“import Vue from 'vue'”,而不是“import vue from vue”。这个小写的“vue”对应的是npm包的名称,而不是Vue.js的名称。 3. 检查文件路径是否正确:如果Vue.js文件与当前文件不在同一目录下,则应该使用正确的文件路径导入Vue.js。 4. 检查webpack配置:如果项目使用webpack打包工具,可能需要检查配置文件是否正确地引入了Vue,并且配置了正确的别名。 5. 检查是否有其他库与Vue冲突:在某些情况下,可能存在其他库与Vue.js冲突,导致出现错误。可以使用“npm ls”命令查看项目中使用的npm包,确保没有其他端口与Vue.js使用相同的命名空间。 6. 检查网速以及npm源:如果安装包极慢,或者报错为404错误或报网络错误,请检查网络和npm源是否正常以及版本是否过旧。 总之,解决“import vue from vue报错”问题需要从多个方面入手,可能需要检查文件路径、模块引用方式、webpack配置等多个方面。按照上述步骤进行排查,应该能够找到并解决问题。 ### 回答3: 当我们在使用 Vue.js 开发,有会遇到类似 import vue from vue 错误的情况。这种错误提示一般发生在我们使用 Vue.js 的过程中导入 Vue.js 库的方式出现了问题。解决此问题的方法如下: 1. 确认 Vue.js 是否被正确引入 首先需要确认引入的方式。如果你使用的是 CDN 引入,那么请确保使用的是正确的 CDN 引入地址,同检查网络是否正常。如果你使用的是 NPM 安装,那么请确保已经正确安装了 Vue.js。 2. 检查代码是否存在语法错误 当我们使用 import 语法导入 Vue.js,需要保证代码中没有语法错误。一些常见的语法错误包括括号未闭合、变量未定义等。 3. 确认是否使用了正确的导入方式 在 Vue.js v2.x 中,我们使用的导入方式应该为: import Vue from 'vue' 如果你的代码中出现了 import vue from vue 的错误,那么你可以修改导入方式为上述的正式导入方式。请注意区分大小写,Vue.js 库名称的第一字母大写。 4. 检查浏览器是否支持 ES6 语法 在一些较老的浏览器中可能不支持 ES6 语法,导致 import vue from vue 的错误。此我们需要使用一些工具将 ES6 语法转换为 ES5 语法,例如 Babel。 总的来说,出现 import vue from vue 错误的情况可能存在多种原因。我们需要仔细检查代码、网络与浏览器环境等因素,以找到错误并解决。希望这篇文章对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值