我想知道如何在节点后端结合玩笑的esm
软件包https://www.npmjs.com/package/esm。
我尝试使用文件顶部的require("esm")
和require("esm")(module)
来设置安装文件,但是仍然出现SyntaxError: Unexpected token
错误。
我以前会使用node -r esm
,但开玩笑不支持此操作。
答案 0 :(得分:6)
执行require("esm")(module)
时,请在创建esm-transformer函数时将其想到,该函数正在等待文件转换为ES模块。
这是我尝试使用以下节点v8 +:
默认jest
配置
默认esm
配置
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')
希望这会有所帮助!
答案 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"
}
}
项目。
node.js
或esm
添加npm i esm
包创建yarn add esm
index.js
创建main.js
require = require("esm")(module/*, options*/);
module.exports = require("./main.js");
export {}
如果您想了解更多信息,请填写link
答案 2 :(得分:0)
Jest 文档在页面 ECMAScript Modules 上对此进行了介绍:
<块引用>确保您要么通过传递 transform: {} 禁用代码转换,要么将您的转换器配置为发出 ESM 而不是默认的 CommonJS (CJS)。
使用 --experimental-vm-modules 执行节点,例如node --experimental-vm-modules node_modules/.bin/jest 或 NODE_OPTIONS=--experimental-vm-modules npx jest 等等。在Windows上,你可以使用cross-env来设置环境变量。
除此之外,我们尝试遵循节点的逻辑来激活“ESM 模式”(例如查看 package.json 或 mjs 文件中的类型),有关详细信息,请参阅他们的文档。
如果您想将其他文件扩展名(例如 ts)视为 ESM,请使用 extensionsToTreatAsEsm 选项。