标签: commonjs

未找到命名的导出“类型”。请求的模块“mongoose”是一个 CommonJS 模块,它可能不支持所有 module.exports 作为命名导出

我有一个用 typescript 编写的 Express 服务器,并"module": "es2020"在其 tsconfig.xml 中。

我还es2020为我的 graphql API 开发了另一个模块,仍然是 typescript,这个模块使用 mongoose 和这样的命名导入:

import { Types } from 'mongoose'
Run Code Online (Sandbox Code Playgroud)

当我用 编译我的 graphql 模块时,一切正常tsc。但是运行的快递服务器

nodemon --watch './**/*.ts' --exec 'node --experimental-specifier-resolution=node --loader ts-node/esm' src/index.ts

无法处理名为 import 的猫鼬。

import { Types } from 'mongoose';
         ^^^^^
SyntaxError: Named export 'Types' not found. The requested module 'mongoose' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose commonjs typescript ecmascript-2020

32
推荐指数
2
解决办法
8万
查看次数

package.json 中的“main”和“module”与“exports”有什么区别?

我正在尝试编写一个既可以是required 又可以是imported 的库。在网上找到了不同的方法,如下:

{
  "main": "mylib-cjs.js",
  "module": "mylib-esm.js"
}
Run Code Online (Sandbox Code Playgroud)

{
  "exports": {
    "import": "mylib-esm.js",
    "require": "mylib-cjs.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

这两种方法的优点和缺点是什么,它们有何不同?

javascript import require commonjs node.js

31
推荐指数
1
解决办法
7154
查看次数

EventMachine vs Node.js

我将开发一个协作网站,其中一个功能将是实时更改的协作编辑.即,当两个或更多用户正在编辑同一个文档时,他们可以在发生时立即看到彼此的变化.我对Ruby on Rails有一些经验,所以我在考虑使用EventMachine,但是围绕Node.js的所有这些炒作,我知道考虑使用它.那么,使用Node.js而不是EventMachine的主要好处是什么?

tl; dr EventMachine和Node.js之间的主要区别是什么(除了语言)?

ruby-on-rails event-driven eventmachine commonjs node.js

30
推荐指数
3
解决办法
1万
查看次数

构建NodeJS模块 - 变量和方法

我想创建模块来构建我的NodeJS应用程序,但我有点迷失,而且我还没有找到任何关于这个主题的完全确定的东西(有几个小时的搜索).

假设我想创建一个"用户"模块,我可以使用以下内容在我的代码中创建新用户:

var newUser = new User();
Run Code Online (Sandbox Code Playgroud)

理想情况下,我需要使用以下代码之类的代码顶部的模块:

var User = require('../lib/user');
Run Code Online (Sandbox Code Playgroud)

这非常有效.问题是,我应该如何构建用户模块?以下是最好的方法吗?

module.exports = function User()    {
    var authorized = false;
    var username = undefined;
    var password = undefined;
    var statistics = undefined;

    this.authorized = function()  {
        return authorized;
    }
    this.username = function()  {
        return username;
    }
    this.statistics = function()    {
        return statistics;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在为各种模块变量编写getter和setter,允许我隐藏我不想从其他代码中意外访问的内容.但是,我之前这样做过:

function User() {
    this.authStatus = false;
    this.email;
    this.displayName;
    this.inSession;
}

User.prototype.isAuthenticated = function() {
    return(this.authStatus && this.email && this.displayName)
}

User.prototype.isInSession = function() …
Run Code Online (Sandbox Code Playgroud)

javascript closures commonjs node.js

27
推荐指数
2
解决办法
4万
查看次数

如何正确使用ESJ"导出默认值"与CommonJS"require"?

我一直在通过Webpack教程.在其中一个部分中,它给出了代码示例,其中包含一行本质问题:

export default class Button { /* class code here */ }
Run Code Online (Sandbox Code Playgroud)

在所述教程的下一部分,标题为"代码分割",上面定义的类是按需加载的,如下所示:

require.ensure([], () => {
    const Button = require("./Components/Button");
    const button = new Button("google.com");
    // ...
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,此代码抛出异常:

Uncaught TypeError: Button is not a function
Run Code Online (Sandbox Code Playgroud)

现在,我知道包含ES6模块的正确方法是简单地import Button from './Components/Button';在文件的顶部,但是在文件中的任何其他地方使用类似的构造会让babel成为一个悲伤的熊猫:

SyntaxError: index.js: 'import' and 'export' may only appear at the top level
Run Code Online (Sandbox Code Playgroud)

require.ensure()上面的上一个()示例的一些摆弄之后,我意识到ES6 export default语法导出一个具有名为property的对象,该对象default包含我的代码(Button函数).

我通过.default在require调用后附加来修复损坏的代码示例,如下所示:

const Button = require("./Components/Button").default;
Run Code Online (Sandbox Code Playgroud)

...但我认为它看起来有点笨拙并且容易出错(我必须知道哪个模块使用ES6语法,哪个使用旧版本module.exports).

这让我 …

javascript commonjs ecmascript-6 webpack es6-module-loader

26
推荐指数
1
解决办法
8540
查看次数

CommonJS 'require' 是否仍在使用或已弃用?

当前的 Javascript 采用importES6 作为导入模块的标准方式。但是,我有时会看到使用 CommonJSrequire而不是import.

我首先想知道两个是否可以一起使用,但似乎两个不能互换。(相关的stackoverflow问题

那么,CommonJS“需要”的东西还在项目中使用吗?或者它正在慢慢消亡并且仅需要维护遗留代码?

javascript commonjs es6-modules

26
推荐指数
1
解决办法
1万
查看次数

这种自我调用匿名函数变体背后的原因

在github上查看代码时,我发现了以下内容:

(function() {

}).call(this);
Run Code Online (Sandbox Code Playgroud)

这显然是一个自我调用的匿名函数.但为什么这样写呢?我习惯于看到规范的变体(function() {})().

使用.call(this)自动调用匿名函数有什么特别的优势吗?


编辑:看起来某些commonjs环境this在模块的顶层设置为非全局值.哪些,以及它们this可能想要保留的内容是什么?

javascript module anonymous-function commonjs coffeescript

25
推荐指数
2
解决办法
6089
查看次数

module.exports"模块未定义"

所以,我正在使用RequireJS和React,尝试加载第三方组件,该组件已安装:

npm install react-autocomplete
Run Code Online (Sandbox Code Playgroud)

结构在这里:https://github.com/rackt/react-autocomplete/tree/master/lib

现在,我有一个main.js文件,在加载requireJS时启动,如下所示:

require.config({
paths: {
      "react" : "react/react",
      "jsx-transformer" : "react/JSXTransformer",
      "react-autocomplete" : "node_modules/react-autocomplete/lib/main"
    }
});

require(["react"], function(react) {
    console.log("React loaded OK.");
});

require(["jsx-transformer"], function(jsx) {
    console.log("JSX transformer loaded OK.");
});

require(['react-autocomplete'], function (Autocomplete) {
    console.log("React autocomplete component loaded OK.");
    var Combobox = Autocomplete.Combobox;
    var ComboboxOption = Autocomplete.Option;
    console.log("Autocomplete initiated OK");
 });
Run Code Online (Sandbox Code Playgroud)

现在,它都加载正常,但第三个require语句为第三方组件中的main.js文件抛出"模块未定义",如下所示:

module.exports = {
  Combobox: require('./combobox'),
  Option: require('./option')
};
Run Code Online (Sandbox Code Playgroud)

我一直在阅读这与我试图要求一个CommonJS风格的模块有关,但我无法弄清楚如何自己修复它,因为我是新手.

有没有人有一个明确的例子,我怎么能解决这个问题?

javascript commonjs requirejs reactjs

24
推荐指数
2
解决办法
6万
查看次数

在ES6的`import`语法中,如何精确评估模块?

比方说,我们有四个模块A,B,CD

在模块中A:

console.log("A evaluated")
function AClass {
  console.log("A constructor")
}
var aObj = new AClass()
export default aObj;
Run Code Online (Sandbox Code Playgroud)

在模块中B:

import aObj from A
export default "B"
Run Code Online (Sandbox Code Playgroud)

在模块中C:

import aObj from A
export default "C"
Run Code Online (Sandbox Code Playgroud)

在模块中D:

import b from B
import c from C
import aObj from A
Run Code Online (Sandbox Code Playgroud)

因此,当模块D进行评估,多少次将A evaluatedA constructor被打印到控制台上?

这种行为是否在ES6标准中描述?如果我想要仅对一个模块进行评估,无论直接或间接导入多少次,我该怎么办?有没有人对此有任何想法?

javascript commonjs node.js ecmascript-6 webpack

24
推荐指数
1
解决办法
2419
查看次数

使用grunt从browserify生成源映射

我按照这里的说明操作:https://www.npmjs.org/package/grunt-browserify,尝试在grunt上设置browserify的源映射.我的gruntfile中的browserify选项是:

browserify: {
            options: {
                bundleOptions : {
                    debug: true 
                }
            },
            dist: {
                files: {
                    "public/client.bundle.js": ["bundle.js"]
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

bundle.js的生成没有任何问题,但源映射生成不会发生.我的grunt-browserify选项有什么问题吗?

谢谢你的期待.

javascript commonjs browserify gruntjs

23
推荐指数
2
解决办法
2万
查看次数