节点-将笑话与esm软件包一起使用

时间:2018-11-01 04:25:43

标签: javascript jestjs

我想知道如何在节点后端结合玩笑的esm软件包https://www.npmjs.com/package/esm

我尝试使用文件顶部的require("esm")require("esm")(module)来设置安装文件,但是仍然出现SyntaxError: Unexpected token错误。

我以前会使用node -r esm,但开玩笑不支持此操作。

3 个答案:

答案 0 :(得分:6)

执行require("esm")(module)时,请在创建esm-transformer函数时将其想到,该函数正在等待文件转换为ES模块。

这是我尝试使用以下节点v8 +:

  • 默认jest配置

  • 默认esm配置

enter image description here

utils-1.js:

export const add = (a, b) => a + b;

utils-2.js:

export const multiAdd = array => array.reduce((sum, next) => sum + next, 0)

_test_ / utils-1.assert.js

import { add } from '../utils-1';

describe('add(a,b)', () => {
  it('should return the addtion of its two inputs', () => {
    expect(add(1,2)).toBe(3);
  });
});

_test_ / utils-2.assert.js

import { multiAdd } from '../utils-2';

describe('multiAdd(<Number[]>)', () => {
  it('should return a summation of all array elements', () => {
    expect(multiAdd([1,2,3,4])).toBe(10);
  })
});

_test_ / utils.test.js

const esmImport = require('esm')(module);
const utils_1 = esmImport('./utils-1.assert')
const utils_2 = esmImport('./utils-2.assert')

enter image description here

希望这会有所帮助!

答案 1 :(得分:0)

<table class="table"> <tbody class="list" id="list"> <tr> <td>BODY 1</td> <td>BODY 2</td> <td> <button class="removeElement">removeNextTd</button> </td> <td class="forRemove">BODY 4</td> </tr> <tr> <td>BODY 1</td> <td>BODY 2</td> <td> <button class="removeElement">removeNextTd</button> </td> <td class="forRemove">BODY 4</td> </tr> <tr> <td>BODY 1</td> <td>BODY 2</td> <td> <button class="removeElement">removeNextTd</button> </td> <td class="forRemove">BODY 4</td> </tr> </tbody> </table>是表亲,可能是require("esm")

遵循require("esm")(module/*, options*/)可能会对您有所帮助。

package.json

我已按照以下步骤创建了普通的{ "name": "ESMPak", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "esm": "^3.0.84" } } 项目。

  1. 使用node.jsesm添加npm i esm
  2. 创建yarn add esm

    index.js

  3. 创建main.js

    require = require("esm")(module/*, options*/); module.exports = require("./main.js");

  4. 并运行export {}

如果您想了解更多信息,请填写link

答案 2 :(得分:0)

Jest 文档在页面 ECMAScript Modules 上对此进行了介绍:

<块引用>
  1. 确保您要么通过传递 transform: {} 禁用代码转换,要么将您的转换器配置为发出 ESM 而不是默认的 CommonJS (CJS)。

  2. 使用 --experimental-vm-modules 执行节点,例如node --experimental-vm-modules node_modules/.bin/jest 或 NODE_OPTIONS=--experimental-vm-modules npx jest 等等。在Windows上,你可以使用cross-env来设置环境变量。

  3. 除此之外,我们尝试遵循节点的逻辑来激活“ESM 模式”(例如查看 package.json 或 mjs 文件中的类型),有关详细信息,请参阅他们的文档。

  4. 如果您想将其他文件扩展名(例如 ts)视为 ESM,请使用 extensionsToTreatAsEsm 选项。