你知道import Vue from 'vue' 吗?

简介: 随着前端模块化的兴起,特别在 vue、react等一些热门框架的崛起,越来越多的公司加入了这一阵营。提及前端的模块化(这里主要说的是Javascript语言的模块化),就不得不说 es6标准提出的 export 和 import 两个命令了。当然还有 commonJS里的 module.exports 和 require 这一对组合了,这里暂不介绍这两组命令的具体用法。以后 我会专门写一篇文章介绍这两个命令的用法。

前言

随着前端模块化的兴起,特别在 vuereact等一些热门框架的崛起,越来越多的公司加入了这一阵营。提及前端的模块化(这里主要说的是Javascript语言的模块化),就不得不说 es6标准提出的 export 和 import 两个命令了。当然还有 commonJS里的 module.exports 和 require 这一对组合了,这里暂不介绍这两组命令的具体用法。以后 我会专门写一篇文章介绍这两个命令的用法。我们以 es6中的 export 和 import 为例,介绍一下:

import 加载的具体流程是怎么样的


加载普通模块文件内容:

我们使用 import 加载同一项目下的某个模样文件的时候,应该是很熟练了。简单看一下。

创建一个vue项目,这个过程就不多说了,很简单,创建完之后看一下目录结构:

4edc953e2c684bbe819ffa954c899c08.png

现在我要在 main.js里面引用 utils.js里面的内容,先看一下两个文件的内容:

// main.js
import Vue from 'vue'
import App from './App.vue'
import { log } from './utils.js'
Vue.config.productionTip = false
log('main.js')
new Vue({
  render: h => h(App),
}).$mount('#app')
// utils.js
export function log(content = '') {
  console.log(content)
}

很简单,只是在 main.js 引用了 utils.js的 log 方法,这里要记住一点:

import { log } from './utils.js' 这行代码中 from 后面的 './utils.js' 要加上 ./

再后面会有一个比较。


加载其它项目的文件

在平时开发中,不可避免的要用到其它项目,就比如说,开发vue项目,就肯定要引用 vue 这个框架。我们都知道,在自己项目中的 main.js文件里面写入:

import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
new Vue({
  render: h => h(App),
}).$mount('#app')

就可以使用了,不知道小伙伴有没有发现两个问题:

  • 两个 importfrom 后面跟着的格式还是不一样,第一个没有 ./ 而第二个有 ./
  • 一个项目有很多个模块文件,import Vue from 'vue' 到底是引入的哪个文件?

说到这里了,就不得不提一个 重要的文件了: package.json。这个文件是描述一个 npm 项目的基本信息。里面有很多重要的配置。而与我们今天要介绍的内容有关的配置是 main 这个属性配置。

在我们项目的根目录下也有这个文件,我们打开 node_modules里面的一些项目,都会有这个文件。如 vue 项目:

4edc953e2c684bbe819ffa954c899c08.png

看一下里面的 main 标签 内容:

4edc953e2c684bbe819ffa954c899c08.png

说一下结论:

main属性主要使用在引用或者开发某个依赖包的时候需要此属性的支持,不然工程中无法用import导入依赖包

现在,我们自己写个项目放入 node_modules 中,目录如下:

4edc953e2c684bbe819ffa954c899c08.png

// package.json
{
  // 省略了
  "main": "index.js",
  // 省略了
}
// index.js
export const name = 'index name'

main.js引入一下:

import Vue from 'vue'
import App from './App.vue'
import { name } from 'test'
Vue.config.productionTip = false
console.log(name)

运行一下,会输出:'index name'

现在把 package.json中的main属性改一下,改成:"main": other.js",再运行,发现报错了,找不到文件

error  in ./node_modules/test/index.js
Module build failed: Error: ENOENT: no such file or directory, open '/Users/mac/Desktop/project/test-vue/node_modules/test/index.js'

再把 import { name } from 'test' 改成:import { name } from 'test/other.js'可以发现又正常了。这就说明:如果我们不指定引用哪个文件,就会根据 package.json中的main属性配置来找这个文件

如果我把main属性删除了,两把import { name } from 'test/other.js'改成import { name } from 'test'

再保存,这个时候还是会报错,找不到文件。我把 other.js改成 index.js。保存运行,又可以正常运行了。

说一下结论吧:

  • 对于引入项目本身自带的模块就要加上 ./ 或者 ../ 对这两个东西不熟悉的小朋友,可以去搜一下用法。
  • 对于引用其它项目中的,这里主要是指 node_modules里面的项目,就不能加 ./ ,否则会报错,找不到。具体情况如下:
  1. 如果我们指定要引用的文件,就直接写具体的名字就好了,如上面的:'test/other.js'
  2. 如果只写了项目的名字,会根据 package.json 中的 main属性配置来找入口文件。如果没有找到,则报错
  3. 如果没有 main 属性,则默认会去找项目根目录下面的 index.js模块为入口文件。如果没有找到,则报错
相关文章
|
4天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
vue学习第四章
|
4天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
vue学习第九章(v-model)
|
4天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
vue学习第十章(组件开发)
|
10天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
10天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
10天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
10天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
9天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
11天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
9天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
下一篇
无影云桌面