【问题标题】:Default import index.js file默认导入 index.js 文件
【发布时间】:2021-01-19 01:12:00
【问题描述】:

嗨,我在 .js 文件中有以下 ES6 语句(在使用 webpack 的 vue.js 项目中)

import my_value from 'path_to_folder1/folder2';  //after `from` keyword, I don't include index.js.

上述语句将在前两步中运行:

第 1 步) webpack 将 ES6 导入语法转换为 require 语法,

例如:

import my_value from 'path_to_folder1/folder2';

将被转译为:

var my_value = require('path_to_folder1/folder2'); 

第 2 步) node.js 将从 folder2 文件夹中搜索并加载(默认情况下)一个 index.js 文件。

第 3 步) 是 node.js 的一项功能,用于在 require 语句中从文件夹中默认搜索和加载 index.js 文件?有这方面的官方文件吗?

你能告诉我前两个步骤是否正确吗?

那么,我想要第 3 步的答案。

这很重要。谢谢

【问题讨论】:

标签: node.js vue.js


【解决方案1】:

Node.js 会首先检查 require 的参数是目录还是文件。 如果:

  • 这是一个目录 -> 加载 index.js

  • 如果是文件:

    • 如果指定文件存在->加载文件
    • 如果指定的文件不存在,添加扩展名.js 并尝试加载。通常这是您真正想要采用的方法。由于您可能有一些 TS 文件,然后将它们编译为 js……编译器会为您解决这个问题

现在,不,这不一定是您的导入的编译方式。这取决于编译器的配置。但是,默认情况下,您正在寻找模块的默认导出。因此,默认情况下,如果您的导入如下所示:

import my_value from 'path_to_folder1/folder2';

那么它实际上被解释为

const {default: my_value} = require('path_to_folder1/folder2');

现在,如果您的 path_to_folder1/folder2/index.js 指定 export default blabla,那么您已经准备就绪。如果没有,根据您的转译器的配置,您最终可能会遇到错误。如果您的转译器允许默认导入并且您的模块没有任何默认导出,它将导入一个包含所有导出的对象。

【讨论】:

  • 感谢您的回答。因此在 webpack vue.js 项目中,babel transpiles --> import my_value from 'path_to_folder1/folder2'; to --> const {default: my_value} = require('path_to_folder1/folder2');。对吗?
  • 是的。或者,如果您没有默认导出并且您不想与配置作斗争(因为我现在找不到 webpack 自动导入非默认模块的正确配置),您始终可以将导入定义为import * as my_value from 'path_to_folder1/folder2';。然后将其转译为var my_value = require('path_to_folder1/folder2');
  • 我怎么能理解webpack resolution 没有被使用呢?我应该检查是否为路径解析配置了 webpack.config.js 文件?
猜你喜欢
  • 2019-11-08
  • 2018-02-11
  • 2019-04-22
  • 2020-01-27
  • 2017-05-08
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多