Maison  >  Questions et réponses  >  le corps du texte

javascript - ES6 importe {} à partir d'un problème de nom de suffixe '..'

Récemment, je lisais l'introduction ES6 de Ruan Yifeng. Je ne comprends pas très bien les zones encerclées dans l’image ci-dessous.

L'article mentionnait que le suffixe .js ne pouvait pas être omis.
Mais l'écriture suivante apparaît ci-dessous :

// lib.js
export let counter = 3;
export function incCounter() {
  counter++;
}

// main.js
import { counter, incCounter } from './lib';
console.log(counter); // 3
incCounter();
console.log(counter); // 4

Iciimport { counter, incCounter } from './lib';不是省略了.jsY a-t-il un suffixe ?
Par rapport à certains codes de réaction écrits par d'autres :

import React from "react";
import { render } from "react-dom";
import { Provider } from "react-redux";
import App from "./containers/App.jsx";
import Store from "./store/Store";

import React from "react";这里也省略了.js后缀,但是import App from "./containers/App.jsx";Mais le suffixe du nom a été entièrement écrit.

Veuillez demander à des experts de répondre à vos questions : Dans quelles circonstances devons-nous écrire .jsce type de suffixe après l'importation..from, et quand ne devons-nous pas écrire  ? Ou est-ce parce que quelqu'un d'autre a configuré quelque chose avec un outil, il n'est donc pas nécessaire d'écrire un nom de suffixe.
Merci beaucoup ! ! !

阿神阿神2674 Il y a quelques jours1199

répondre à tous(3)je répondrai

  • 迷茫

    迷茫2017-06-26 10:54:54

    Veuillez d'abord faire la distinction entre l'analyse native du navigateur et le prétraitement de l'outil d'empaquetage.

    Natif du navigateur

    Le navigateur a besoin d'un suffixe lors de l'analyse de l'instruction d'importation. Pour être plus précis, le navigateur reconnaît la chaîne après l'importation comme une adresse URL. C'est la même chose que d'écrire background-image: url(./path/to/a.jpg) dans votre fichier CSS. Le navigateur obtiendra l'adresse URL de la ressource dépendante en fonction du fichier actuel et de la BaseURL de la page, puis enverra une requête HTTP au serveur. Le suffixe n'est pas si important dans l'adresse URL de la requête HTTP. Le navigateur reconnaît le Content-Type dans l'en-tête de réponse HTTP Tant que le serveur de ressources hébergeant votre js ou votre image peut répondre correctement à la requête HTTP du navigateur. vous pouvez le définir avec désinvolture (bien sûr, le serveur de ressources général aura un mappage de l'extension de fichier vers l'en-tête de réponse HTTP MIMEType. Vous pouvez ajouter d'autres suffixes personnalisés pour que le serveur puisse répondre correctement, mais il est préférable de le configurer. comme convenu), ou même tricher. L'URL est http://a.com/b.jpg Le contenu renvoyé est un caractère de texte avec l'en-tête de réponse
    application/javascript.

    Outils d'emballage

    Dans le cas des outils de packaging, par souci de compatibilité, les instructions d'importation en js seront traduites en instructions d'importation pour la gestion des modules implémentée avec ES5, comme par exemple la recherche dans le répertoire __webpack_require__, 浏览器最后加载的是打包后的 bundle 文件,并没有执行 import 语句(大部分浏览器至今尚未实现import)。 这个时候,我们写的 import 后面到底要不要后缀,全凭工具自己定义规则啊,只要工具在编译打包时能找到被依赖模块。比如webpack可以设定先找 .ts 如果没有再找 .es 再找 .js, 如果是一个文件夹,就看文件夹里有没有 index.js,甚至从node_modules de webpack...

    Résumé :

    1. Outil de traduction et de packaging : pas besoin d'écrire

    2. Prend en charge nativement le nœud ES6 : pas besoin d'écrire

    3. Navigateurs prenant en charge nativement ES6 : il suffit de le trouver sur le serveur via l'URL. Si HTTP2 devient vraiment populaire et que ES6 est entièrement implémenté par le navigateur et que les fichiers n'ont pas besoin d'être empaquetés, l'outil d'empaquetage aura un moyen de le gérer facilement.

    Résumé : N'écrivez pas

    répondre
    0
  • ringa_lee

    ringa_lee2017-06-26 10:54:54

    Avis personnel :

    1. Par exemple : react, react-dom, vue, etc. sont tous publiés par des contributeurs NPM package (c'est-à-dire des modules packagés après avoir été installés à l'aide de NPM, ils seront stockés dans le répertoire node_modules). module

    2. Le fichier JS n'est pas un module, (ce qui est dit ici n'est pas complet)

      • est fourni dans ES6, (utilisez l'importation et l'exportation pour définir les modules)模块化

      • Dans Node.js, la spécification CommonJS est utilisée pour définir les modules

    3. Recommander un article

    4. répondre
      0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-26 10:54:54

    1. .js不能省略,主要是为了可读,以及区分。假设你目录下有个自己写的模块test,还有一个自己写的js文件test.js。模块是以文件夹形式存在的,然后你用import './test',你无法确定你加载的是模块还是test.js (Bien que, dans ES6, un fichier JS soit également considéré comme un module).

    2. Ce codeimport React from "react",并不是省略了.js,而是直接省略了/index.js。这是一个由npm安装的包,在node_modules文件夹下面,其实它导入的是node_modulesreactindex.js,是整个包的入口文件,然后由index.js再去加载react需要用到的其他子jsfichier que vous voyez

    3. Notez que dans node.js, la partie import语法,所以需要通过require()引入包,用module.exportsexportsimportable d'ES6 du package exposé n'est pas encore prise en charge.

    Veuillez consulter la documentation MDN pour plus de détails

    répondre
    0
  • Annulerrépondre