gpt4 book ai didi

node.js - CommonJS 模块的同构导入

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:10 25 4
gpt4 key购买 nike

我编写了一个小型库,它可以在浏览器和服务器上运行。该库又使用作为 CommonJS 模块发布的 npm 库(例如 lodash.isequal)。

我想用两种不同的方式编译库:

  1. 使用tsc,生成在服务器上使用的commonjs模块
  2. 通过webpack,使用awesome-typescript-loader,生成es6模块供webpack打包

根据 docs ,导入覆盖 module.exports 的 CommonJS 库的正确方法如下:

import isEqual = require('lodash.isequal');

然而,对于第二个编译案例, typescript 提示

error TS1202: Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from "mod"', 'import {a} from "mod"', 'import d from "mod"', or another module format instead.

我通过将代码导入为以下内容,成功地使代码生成正常工作:

import * as isEqual from 'lodash.isequal';

但这需要禁用类型检查,否则 typescript 会提示如下错误:

error TS2497: Module '"/home/user/ts-mod-test/node_modules/@types/lodash.isequal/index"' resolves to a non-module entity and cannot be imported using this construct.

最佳答案

自 TypeScript 2.7 起,可以通过使用合成默认导入来解决此问题。使用esModuleInterop flag、isEqual(以及类似的模块)可以像在 babel 和 webpack 中一样导入:

import isEqual from 'lodash.isequal';

对于 module 选项设置为 es6 的 webpack,导入将保持原样,webpack 本身将处理合成默认值。对于node,将module设置为CommonJS,相应的emit将为const lodash_isequal_1 = __importDefault(require("lodash.isequal"));,其中__importDefault处理像Babel这样的非es模块情况

关于node.js - CommonJS 模块的同构导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48242819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com