【问题标题】:What is the difference between these two methods for importing a javascript module?这两种导入 javascript 模块的方法有什么区别?
【发布时间】:2017-04-22 19:51:21
【问题描述】:

我是 javascript 开发的新手。我正在使用 npm。

我想生成一些uuid所以我找到了一个uuid包:
https://www.npmjs.com/package/uuid

我通过运行安装它 npm install uuid

现在,我想在我的代码中使用这个包。

我发现有两种方法可以做到这一点。 npm 文档建议:

// Generate a v4 UUID (random) 
const uuidV4 = require('uuid/v4');
uuidV4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' 

但我想我也可以这样做(这似乎可行):

import uuid from 'uuid';
console.info(uuid.v4());

我的问题:

  • 它们之间有什么区别?
  • 如何知道模块导出的内容,以便知道我可以导入什么以及在什么路径下导入?例如,我似乎也可以做到import v4 from 'uuid'...但我不太明白这是如何工作的。

【问题讨论】:

    标签: javascript npm


    【解决方案1】:

    require 是在项目中包含模块的 es5 方式。

    import 是在项目中包含模块的 es6 方式。

    如果您需要支持旧版浏览器并希望使用 es6 功能,则需要使用 Babel 等转译器将您的代码转换为 es5 格式。

    通过导入,您可以获取模块的各个部分。让我们以此为例:

    // test.js
    export default () => { console.log("Hi, I'm a default export"); }
    
    export NotDefault = () => { console.log("I am not the default export"); }
    

    如果你现在尝试:

    import NotDefault from "test.js";
    

    您实际上不会导入 NotDefault,而是导入默认导出。

    要导入 NotDefault,您可以使用以下格式:

    import { NotDefault } from "test.js";
    

    ES5 语法

    module.exports = function() {
        // this is now the default export of this file.
        // you can use this file in another by typing var MyVar = require("module_name");
    }
    
    exports.MyFunc = function() {
        // this is also exported from this file
        // you can use this by var MyVar = require("module_name").myFunc;
    }
    

    ES6 语法

    default export function() {
        // this is the default export of this file
        // use can use me by typing import MyVar from "module_name";
    }
    
    export const MyFunc = function() {
        // this is also exported and can be used by typing
        // import { MyFunc } from "module_name";
    }
    

    我希望这会有所帮助!

    【讨论】:

    • es6 被除 IE 之外的所有主流浏览器(Chrome、Firefox、Opera、Safari 10、Edge)支持
    • 啊,是的,很抱歉我正在考虑支持旧版浏览器,让我修改一下我的声明。
    • 谢谢。为什么我可以从“uuid”导入而不必指定“uuid.js”?字符串中的标识符到底是什么?如何找到导入?有搜索路径之类的吗?
    • 请不要混淆普通函数和箭头函数,这不是你的答案。将它们保留为函数声明。
    • 谢谢伯吉。您的评论使我做了一些研究并学到了一些东西。
    猜你喜欢
    • 2013-09-08
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2011-01-10
    • 2016-07-01
    相关资源
    最近更新 更多