JavaScript 模块从一个文件中导出模式

Posted

技术标签:

【中文标题】JavaScript 模块从一个文件中导出模式【英文标题】:JavaScript Module Exports Pattern From One File 【发布时间】:2018-02-14 11:44:18 【问题描述】:

文件夹结构:

├── app
├── index.js (start point in Webpack)
├── component
│   ├── Home──Home.js
|   ├──index.js
│

component/Home/Home.js 我的类写成 - export class Home extends React.Component

component/index.js 我已经导出了 - export Home from './Home/Home'

我正在 index.js 中导入(起点)import Home from './components'

它对我有用,而我想要的更改不起作用

    在 component/Home/Home.js 中想导出类似 export default class Home extends React.Component

    在 component/index.js 中,我想像 export Home from './Home/Home' 一样导出

    我想在 index.js 中导入 import Home from './components'

【问题讨论】:

从 index.js 中的 './components' 导入主页 - 应该不起作用。应该是import Home from './components 请确认:) 它不工作,但另一个问题是当我在课堂上写导出默认值时它给出了错误 这个模式有名字吗? 【参考方案1】:

在首页

export default class Home extends React.Component 

在组件/index.js中

export * from './Home/Home'

在索引中

import Home from './components'

【讨论】:

试过但没用 给出错误 React.createElement: type is invalid -- 期望一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:未定义。您可能忘记从定义组件的文件中导出组件。【参考方案2】:

导入和导出独立于文件结构,但是,由于导入中的路径,您当然需要知道文件结构。

component/Home/Home.js想导出像导出默认类 Home 扩展 React.Component

您可以使用关键字 default 导出默认类:

export default class Home extends React.Component 
   // your code

如果这对您不起作用,您仍然可以这样做:

class Home extends React.Component 
   // your code


export default Home;

component/index.js 我想像 export Home from ./Home/Home

如果我没有看到代码,这很难说。我希望您还希望将一些 Home 类/函数作为默认导出,然后您可以执行此操作(或再次执行上述解决方案):

export default const Home = () => 
   // your code
;

或者,再次:

const Home = () => 
   // your code
;

export default Home;

我要在index.js 起点import Home from ./components.

由于现在有默认导出,您可以这样做(导入时您始终可以从路径中省略 index.js):

import Home from './components';

【讨论】:

【参考方案3】:

在您的 Home.js 中:

export class Home extends Component /* your code */

在 index.js 中:

export * as default from './Home/Home'

在主文件中:

import Home from './components'

注意:据我所知,您提出的所有三个条件都无法满足。此外,如果您从索引中将 Home 导出为默认值,那么其他组件呢?

【讨论】:

【参考方案4】:

为了导出所有组件,您可以在index.js 中使用以下模式

export Home from './Home'

为了使它工作,您需要使用babel-plugin-transform-export-extensions,因为这不是 ES 规范的当前部分。

【讨论】:

以上是关于JavaScript 模块从一个文件中导出模式的主要内容,如果未能解决你的问题,请参考以下文章

使用哪个工具从 ODBC 数据库中导出 SQL 模式?

从模块中导出的角度组件在另一个模块中不可用

从 NPM 包中导出多个模块

如何通过 DataGrip IDE 在单个文件中导出和导入 MySQL 模式

只从 js 文件中导出一个函数?

如何在 vanilla Javascript 文件中导入 nodejs 模块