【问题标题】:What is the ~ (tilde) doing in this javascript import?在这个 javascript 导入中,〜(波浪号)在做什么?
【发布时间】:2017-08-24 03:25:45
【问题描述】:

在从喷泉 webapp typescript MVC 示例 (http://fountainjs.io/) 中提取的 App.tsx 中,导入包含以下行:

import {IDispatch} from '~react-redux~redux';

Visual Studio 2017 强调了这一行(“找不到模块”),但它确实在浏览器中工作。我以前从未见过这种语法,也不知道它想做什么?

这里有一张公开的票:https://github.com/FountainJS/generator-fountain-react/issues/70

【问题讨论】:

  • 这是es6 解构。您的包将导出一个名为 IDispatch 的函数等。这意味着您只包含包中的 IDispatch,没有其他内容。这是你写import Redux from '~react-redux~redux' 和后来使用IDispatch 作为Redux.IDispatch 的简写。您可能会看到人们写import React from 'react' 并使用...extends React.Component。然而破坏import React, { Component } from 'react'意味着你可以使用...extends Component
  • 我理解 {braces} 但不理解“来自 '~”
  • 看起来是 Webpack 的东西:stackoverflow.com/q/39535760/215552

标签: javascript reactjs typescript


【解决方案1】:

这是一个打字稿文件,import 看起来像 typings 生成的模块 IMO。

我不精通打字稿,但typings 可能使用这种~(波浪号)格式来检查特定命名空间中的模块依赖关系。

根据Blake Embrey,在typings github repo 上的this 线程中:

它是依赖项的命名空间。

【讨论】:

  • 不错的发现。从阅读该线程来看,它似乎确实是一种沿着类型文件树向下移动的语法。我会让赏金开放一段时间,看看是否有其他人咬...
  • 是的,这是来自typings。在 ts@2.0 后代码中,您可能应该使用 @types/redux 并使用 import { IDispatch } from 'redux'
  • 虽然我找不到任何文档,但我接受这个可能是正确的答案。
【解决方案2】:

波浪号 (~) 与 webpack 一起使用意味着针对 node_modules 执行查找以解析路径。

换句话说,它是一个预定义的alias,解析为node_modules

import { IDispatch } from '~react-redux~redux';

等价于

import { IDispatch } from 'relative_path_to_node_modules/react-redux~redux';

编辑:不幸的是,我无法引用任何关于此的文档,它是基于经验的,欢迎您编辑这篇文章并提供更准确的描述。

现在我也注意到了~redux 部分,所以您可能想查看other answer,因为我也对那里感到困惑。

【讨论】:

  • 您能引用任何有关此的文档吗?
  • 有没有叫react-redux~redux的模块?因为这如何解释第二个~,所以我在此处导出的 json 中找不到任何此类包:github.com/FountainJS/generator-fountain-react/blob/master/…
  • 好点,我没有注意到 ~redux 部分。现在我也完全困惑了。如果我找到更多信息,我会更新,现在我参考你的答案。
  • 另外,我认为您需要手动添加一个别名来将您的查找路径解析为node_modules,例如alias: {'~': path.resolve(__dirname)}
猜你喜欢
  • 2011-05-02
  • 2010-11-22
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多