- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让 ts-node 选项 --experimental-loader
与 mocha 一起工作,但没有成功。在我开始尝试编译 ES6 模块之前,我曾经能够以这种方式运行 mocha 测试:
"test": "nyc --reporter=html mocha --require ts-node/register src/**/*.spec.ts"
这在生成 ES6 模块时不再起作用。
我会使用 TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}'
解决方案进行测试,但这对我不起作用,因为另一个复杂问题:我我构建的第一步是生成 ES6 模块,但也使用 webpack 和 babel 生成 ES5/CommonJS 模块。除非我将 .js
添加到本地 TypeScript import
语句的末尾,否则最后一步不起作用。
但添加那些 .js
扩展结果会破坏 TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}'
解决方案,它将起作用,但是,如果我返回并删除所有 .js
扩展名。我显然不想要一个测试和构建过程,在这个过程中我必须在添加和删除这些扩展之间来回切换。
现在为了简化,我取出了 nyc,并尝试运行这样的测试:
mocha -r ts-node/register --experimental-loader ./ts-loader.mjs src/**/*.spec.ts
这样我没有得到任何错误,但也没有任何反应。就像 src/**/*.spec.ts
不存在一样。
我的(目前)什么都不做的虚拟加载器看起来像这样:
console.log('ts-loader loaded');
export async function resolve(specifier, context, defaultResolve) {
console.log('resolve');
return defaultResolve(specifier, context, defaultResolve);
}
export async function getFormat(url, context, defaultGetFormat) {
console.log('getFormat');
return defaultGetFormat(url, context, defaultGetFormat);
}
export async function getSource(url, context, defaultGetSource) {
console.log('getSource');
return defaultGetSource(url, context, defaultGetSource);
}
export async function transformSource(source, context, defaultTransformSource) {
console.log('transformSource');
return defaultTransformSource(source, context, defaultTransformSource);
}
export function getGlobalPreloadCode() {
console.log('getGlobalPreloadCode');
return '';
}
我可以看出它已加载,因为出现了 'ts-loader loaded'
消息,但从未调用过任何函数。
我已经尝试了其他排列,但只是得到像 src/**/*.spec.ts
被视为文字文件名而不是 glob 的错误,或者有关模块未被处理的错误找到了。
我希望看到我的加载程序在处理每个 import
时被调用,然后弄清楚如何操作文件扩展名,但我还没有设法做到这一点。有什么建议吗?
我正在使用 Node v14.15.1。可以在此处找到我的项目的完整代码,构建工作正常,但测试失败:https://github.com/kshetline/tubular_math
最佳答案
我终于找到了解决方案,尽管它与我最初寻找的路线不同。我放弃了使用额外的 .js
扩展来让 mocha 满意的尝试,并找到了一种方法来让 webpack 在没有它们的情况下也满意。所以……
import { Angle, Mode, Unit } from './angle.js';
...回到...
import { Angle, Mode, Unit } from './angle';
我的测试脚本是这样的:
"scripts": {
"build": "rimraf dist/ && tsc && webpack && webpack --env target=umd",
"prepublishOnly": "npm run build",
"lint": "eslint 'src/**/*.ts'",
"test": "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter=html mocha --require ts-node/register src/**/*.spec.ts"
},
最后,最重要的是,我想出了如何让 webpack 5.x(4.x 没有这个问题)对没有 .js
的本地 JavaScript 导入感到满意扩展,如果你的 package.json
说 "type": "module"
:
module: {
rules: [
{ test: /\.js$/, use: 'babel-loader', resolve: { fullySpecified: false } }
]
}
...将 fullySpecified
设置为 false 是解决方案的关键。
更新:上面的例子是在一个特意简单的项目上完成的,对于初学者来说很容易生成带有 ESM 模块的 npm 包。现在我正在尝试一些更高级的东西,我在运行单元测试时再次遇到了障碍。一旦 *.spec.ts 文件直接或间接导入外部代码,模块加载就会失败。在弄清楚如何解决该问题之前,我只能测试没有外部依赖项的代码。显然使用 "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}'
只是让我更深入地解决运行 mocha 和 ts-node 的基本问题。
关于node.js - 尝试通过 --experimental-loader 选项使用 mocha、ES6 模块和 ts-node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65376414/
使用 FFMPEG 将 flv 转换为 mp4 时,显示以下错误 [aac @ 0x2b4b640] The encoder 'aac' is experimental but experimenta
尝试在 IntelliJ 中构建 Kotlin/Ktor 应用程序时,出现多个表单警告 Warning:(276, 6) Kotlin: This class can only be used wit
我在 中编码C++ 在 Visual Studio (Windows 10)并收到此错误: #error The header providing std::experimental::filesy
我有一段代码使用了很多实验性的功能(when,smartmatch,given),这不是我的代码,并且我不想看到很多有关实验性功能的警告。因此,我在此代码中添加了no warnings 'experi
是否可以通过保留一个计数器来查看算法经过了多少次迭代来完成,或者是否需要记录持续时间? 最佳答案 目前接受的不会给你任何理论估计,除非你能以某种方式用一个近似它们的函数来拟合实验测量的时间。这个答案为
Kotlin 协程可以在生产中使用,它们的实验状态意味着什么? 最佳答案 更新:从 Kotlin 1.3 开始,Kotlin 协程不再是实验性的。 Kotlin 协程可以而且应该在生产环境中使用。这是
我正在使用Ubuntu 16.04。我有gcc-9.2.0,但是我在/usr/local/include/c++/9.2.0/experimental中找不到原子头文件,我想我在编译gcc时必须启用它
我想在 Android Studio 中根据口味设置我的 appName。我使用 com.android.tools.build:gradle-experimental:0.4.0 插件,所以我不能使
我想在我的 cpp 多线程代码中使用 std::experimental::barrier。但即使我写这样的代码: #include #include #include int main ()
我不是 100% 确定以下代码在语义上是正确的: #include #include int main() { std::string str = "lvalue string";
我正在尝试创建一个管道实现,该实现将公开一个接口(interface)以链接对某些给定数据的多个操作,同时保持所述数据的不变性。这里需要注意的是,操作(显然只是纯函数)应该能够改变数据的类型(例如,从
开发环境为 OS X 10.10.3, Perl -v This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thre
我试着做 github std::simd 上给出的例子但我的矢量化版本最终慢了 2-3 倍。如何正确使用? documentary缺乏认真的文档和进一步的示例用法。没有列出构造函数等。我确定我可能以
是否可以避免使用 @ExperimentalTime 注释我的代码的每一部分? ?环顾四周后,我在我的 gradle 构建中尝试了这个: withType().all { kotlinOpti
我正在尝试构建使用std::experimental::optional的项目。对于Linux,它可以很好地编译,但是对于android / ndk,编译器会抛出: error: no member
我的 Perl 程序抛出了一些警告,但我还没有在互联网上搜索解决方案。有什么方法可以重写以下代码片段,这样就不会抛出警告吗? “引用键是实验性的......”: foreach my $key ( k
我正在尝试使用 Cake-Plist 插件,但收到一个错误消息,指出动态尚未在正在使用的 Roslyn 版本中实现。然后从别人的建议中我被告知尝试 -Experimental 开关。使用开关时,我在尝
编译包含 的代码时出现错误. main.cpp 中的代码: #include int main() { } 编译这个(clang 版本是 3.9): clang++ main.cpp -o mai
我在 gcc 6.3.1 中使用实验性 std::filesystem 实现,遇到了一些关于 std::experimental::filesystem::directory_iterator #in
我使用 autobind-decorator bind 上下文到 this。 但是我得到了警告/错误 Experimental decorator usage(Decorators 是一个可能会改变的
我是一名优秀的程序员,十分优秀!