Articles of es6 modules

在只有nodejs的环境中,在ES6 Module / Class中定义“真正的”私有方法,而不会泄漏任何信息

我知道,没有真正的私人方法INSIDE ES6类。 不过,我正在玩一下,发现了一些好东西 – 也许… 正如我所说,不可能不公开对象的属性。 但是我试图实现一些OOP编程,因为我把我的类分成单独的文件,然后导出这些类,如: class MyClass { constructor() { /** * Initialize stuff… */ } myMethod() { /** * Do public stuff… */ } } // expose class to environment. export default MyClass; 所以我可以导入类: import MyClass from './MyClass.js'; 当然myMethod可以从导入模块的其他文件访问。 Sinced我需要的variables和函数只能由我尝试过的类访问: // private variable outside of class scope but still accessible. let possiblePrivateVariable […]

asynchronous函数或async =>导出默认值时?

export default async function () { }; 要么 export default async () => { }; 导出默认函数时首选哪一个,为什么?

如何在版本9中使用Node.js本地导入/导出

我想使用节点本机支持导入/导出与NPM包。 开始我运行cuccumberjs版本3.1.0。 但是,当我运行这个命令: /usr/local/bin/node –experimental-modules ./node_modules/.bin/cucumber-js 我收到一个错误: (node:42011) ExperimentalWarning: The ESM module loader is experimental. SyntaxError: Unexpected token import /full/path/to/test/directory/features/support/getWindowLocation.js:2 import {runJsInBrowser} from "./runJsInBrowser.mjs"; ^^^^^^ 我所有的自动化testing都运行良好,直到我尝试将其中一个脚本转换为ES模块并导入它。 以下是该文件的一个片段: runJsInBrowsers.mjs export default async function runJsInBrowser( browserDriver, windowFunc, waitForReturn = true, timeOut = 10000 ) { … }; – package.json { "name": "tests", "version": "0.0.1", "description": "Test for […]

无法在索引文件nodejs中要求类

我的configuration类:ProjectDir / classes / config.js 'use strict'; class config{ getMongo(){ var MongoClient = require('mongodb').MongoClient; MongoClient.connect('mongodb://127.0.0.1:27017/nodedb', (err, database) => { var db; if (err) return console.log(err) db = database; console.log('Connected to mongo'); }); } } module.exports = config; 我的server.js文件(这里定义了所有路由):ProjectDir / server.js console.log('May Node be with you'); const express = require('express'); const app = express(); const bodyParser […]

如何在节点中使用es6导入?

我试图在节点中获取es6导入的挂载,并试图使用此示例中提供的语法: Cheatsheet链接: https : //hacknoon.com/import-export-default-require-commandjs-javascript-nodejs-es6-vs-cheatsheet-different-tutorial-example-5a321738b50f 我正在通过支持表: http : //node.green/ ,但无法find哪个版本支持新的导入语句(我试图寻找文本import / require)我目前正在运行节点8.1。 2,也相信由于cheatsheet是指.js文件,它应该使用.js文件。 当我运行代码时(从cheatsheet的第一个例子中): import { square, diag } from 'lib'; 我得到的错误:SyntaxError:意外的令牌导入。 引用lib我试图导入: //—— lib.js —— export const sqrt = Math.sqrt; export function square(x) { return x * x; } export function diag(x, y) { return sqrt(square(x) + square(y)); } 我错过了什么,如何让节点识别我的导入语句?

如何单独加载ES6模块(根据需要)又名。 树在摇晃吗?

现在我正在通过我的应用程序,改变这种模式的实例: import {Grid, Row, Col} from 'react-bootstrap' 成: import {Grid, Row, Col} from '../react-bootstrap' 其中react-bootstrap.js是一个简单的文件在我的项目的根目录,有select地导入我需要从NPM包的ES6模块: import Grid from 'react-bootstrap/es/Grid' import Col from 'react-bootstrap/es/Col' import Row from 'react-bootstrap/es/Row' export {Grid, Col, Row} 这样做的一些包,我可以减less我的包文件大小超过50%。 有没有一个WebPack模块或插件可以自动执行任何包? 如果这个转换(也就是只在包中包含明确导入的内容,而不是整个库)recursion地应用于整个包树,我敢打赌,我们会看到显着的尺寸差异。 编辑:正如Swivel指出的那样,这被称为Tree Shaking ,并且应该由Webpack 3+自动执行,UglifyJSPlugin包含在我正在使用的react-scripts的生产configuration中 。 我不确定这是否是这两个项目中的一个bug,但是通过手动进行select性导入,我看到了很大的收益,如果正在执行Tree Shaking,情况就不是这样。

返回的类实例的JSDoctypes

我使用Node.js有两个模块和一个依赖于它们的脚本: LIB / Bar.js module.exports = class Bar { // .. }; LIB / Foo.js const Bar = require('./Bar.js'); module.exports = class Foo { /** * @return {Bar} A Bar instance */ get someBar() { return new Bar(); } }; main.js const Foo = require('./lib/Foo.js'); checkFoo(new Foo()); /** * @param {Foo} foo A Foo instance […]

将ES模块(.mjs)发布到NPMJS,并向后兼容节点<8.5.0

直到Node v8.5.0,将一个用ES6编写的模块发布到NPMJS中是一个简单的过程:使用Babel这样的工具来转换ES6代码,然后将结果的lib目录发布到NPMJS,而你的GitHub仓库包含src文件。 在v8.5.0中,Node已经通过–experimental-modules标志发布了本地模块 ( export / import )的实验支持 。 现在可以将纯ES6模块发布到NPMJS上 ,只要涉及的文件具有.mjs扩展名,就可以在不进行任何转换的情况下使用它们 。 如何发布ES6模块( .mjs ),以便它也可以用于不支持ES本地模块的旧版本的Node?

使用–experimental-modules标志时,节点中__dirname的替代方法

为了使用ES6模块,我运行我的节点应用程序时使用了flag –experimental-modules modules。 但是当我使用这个标志时,元variables__dirname不可用。 有没有其他的方法来获取存储在__dirname与此模式兼容的相同的string?

我可以在Node.js 8中使用ES6模块吗?

从版本8开始,我可以使用ES6模块语法和Node.js吗? 本网站已经提出类似的问题,但答案已经过时。 我想知道情况是否改变了新版本的Node.js?