【问题标题】:How webpack reads what to import?webpack 如何读取要导入的内容?
【发布时间】:2019-09-05 09:55:03
【问题描述】:

我想知道 webpack 如何在内部找出入口文件有哪些导入语句?

例如我的index.js 看起来像

import React, { PropTypes, Component } from 'react';
import { findDOMNode } from 'react-dom';
import classnames from 'classnames';
import Loading from 'components/Loading';
import Button from 'components/Button';
import Header from 'components/Header';
import Footer from 'components/Footer';

class App extends Component {
    render() {
        return (
            <div className="shopping-list">
                <Header />
                <h1>Shopping List for {this.props.name}</h1>
                <ul>
                   <li>Instagram</li>
                   <li>WhatsApp</li>
                   <li>Oculus</li>
                </ul>
                <Footer />
            </div>
        );
    }
};

export default App;

现在我想了解 webpack 是如何找出该文件的其他导入的?然后其中一个导入的文件还有其他导入的文件?

【问题讨论】:

  • 我不知道具体实现细节,但绝对是某种以你的入口文件为源顶点的图遍历。此外,请参阅 this 以了解捆绑程序的工作原理。
  • AST 从你的入口点递归遍历。
  • 您应该从webpack.js.org/concepts 开始以获得更高层次的理解并探索他们提供的链接以进行详细解释,如果您不理解,那么您缺乏更基本概念的知识,因此您需要学习首先。

标签: javascript node.js reactjs webpack


【解决方案1】:

基本上,Webpack 是构建工具,它旨在将您的应用程序转换为优化的解决方案,例如压缩 js/scss/css 和更多文件。

Webpack 可以根据您的选择进行配置,并且开发了许多加载器和插件,您可以使用它们来添加对该类型文件的支持。

这就像告诉系统获取源文件列表(输入)并使用相关的 webpack 插件或加载器编译它们并提供优化的解决方案作为输出。

通过 webpack 配置,你告诉它加载这种类型的文件并在此处生成输出,它通常会将你的高级源代码转换为原生源代码,因此它可以在任何系统上运行。

例如,

我们知道scss文件不被浏览器支持,我们需要将它转换成css然后我们可以导入它,但是使用scss loader插件并通过webpack配置它可以直接使用scss文件,无需手动转换scss 转 css 可以直接将 scss 文件导入到组件中,webpack 会读取文件,查看类型并为我们转换。

配置 webpack 是困难的部分,但有相当不错的预配置解决方案可供使用,例如 create-react-app,您无需担心配置

更多信息请参阅webpack documentation

【讨论】:

  • 我明白你在说什么,但我仍然不清楚 webpack 是如何做到的,读取文件并找出导入语句。我更想了解实现
  • 基本上 import 不是 webpack 的一部分,它是 es6 功能的一部分,webpack 使用 babel 插件对其进行编译并将其转换为浏览器可以理解的普通 js 代码,但需要配置 webpack为那种文件使用 babel 插件。 import 用于使用另一个文件的功能,该文件使用 export 语句从该文件导出。更多详情see this blog
猜你喜欢
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 2019-11-10
  • 2018-01-03
  • 1970-01-01
  • 2014-08-15
相关资源
最近更新 更多