首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在node.js中,Get不能在模块外使用导入语句

在node.js中,Get不能在模块外使用导入语句
EN

Stack Overflow用户
提问于 2020-08-21 03:35:02
回答 2查看 526关注 0票数 1

我对node.js非常陌生,并学习了一个教程,使用node v13.6.0。我想将is-empty'导入到这个文件中:

代码语言:javascript
复制
const Validator = require('validator');

import isEmpty from './is-empty';

module.exports = function validateRegisterInput(data) {
    
    let errors = {};

    if(Validator.isLength(data.name), {min:2, max: 30}) {
        errors.name = 'name is too short or too long';
        }
    return {
        errors, 
        isValid: isEmpty(errors)
    }
}

但我知道这个错误:

代码语言:javascript
复制
SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:1060:16)
    at Module._compile (internal/modules/cjs/loader.js:1108:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1164:10)
    at Module.load (internal/modules/cjs/loader.js:993:32)
    at Function.Module._load (internal/modules/cjs/loader.js:892:14)
    at Module.require (internal/modules/cjs/loader.js:1033:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/home/me/myapp/routes/api/users.js:12:31)
    at Module._compile (internal/modules/cjs/loader.js:1144:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1164:10)
    at Module.load (internal/modules/cjs/loader.js:993:32)
    at Function.Module._load (internal/modules/cjs/loader.js:892:14)
    at Module.require (internal/modules/cjs/loader.js:1033:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/home/me/myapp/server.js:7:15)
    at Module._compile (internal/modules/cjs/loader.js:1144:30)

is-empty的定义如下:

代码语言:javascript
复制
const isEmpty = value =>
    value === undefined ||
    value === null ||
    (typeof value === 'object' && Object.keys(value).length === 0) ||
    (typeof value === 'string' && value.trim().length === 0);

    module.exports = isEmpty

我在想我怎么解决这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-21 03:52:31

您应该使用require,而不是像https://nodejs.org/api/esm.html#esm_package_json_type_field中所记录的导入

代码语言:javascript
复制
const Validator = require('validator');

const isEmpty = require('./is-empty');

module.exports = function validateRegisterInput(data) {
    
    let errors = {};

    if(Validator.isLength(data.name), {min:2, max: 30}) {
        errors.name = 'name is too short or too long';
        }
    return {
        errors, 
        isValid: isEmpty(errors)
    }
}
``
票数 2
EN

Stack Overflow用户

发布于 2021-06-30 00:35:03

他们想说的是你不能把两者混为一谈。因为Node已经将您的javascript作为require模块来处理,所以您可以使用导入,但是当您引入需求时,整个过程就结束了。

我刚刚经历了一个旧的量角器项目,它使用的是需求。要么全是要么什么都不是,一个或另一个。

https://nodejs.org/api/esm.html#esm_interoperability_with_commonjs

不支持使用require加载ES模块的

,因为ES模块具有异步执行。相反,使用import()从CommonJS模块加载ES模块。

https://nodejs.org/api/esm.html#esm_differences_between_es_modules_and_commonjs

不需要、出口或module.exports

在大多数情况下,ES模块导入可用于加载CommonJS模块。

如果需要,可以使用module.createRequire().在ES模块中构造一个require函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63516144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档