我正在尝试在 Heroku 中部署一个Angular Universal Starter示例。
任务npm start失败,因为它无法识别 ts-node。
有没有办法使用 ts-node 在 Heroku 上进行部署?
我已经很乐意在服务器端代码中导入 .vue 文件。深入地说,我还没有真正使用 *.vue 文件导出,但有些代码对于客户端和服务器端来说是常见的,并引用这些文件。
我现在使用 ts-node 进行开发/调试,并使用 webpack 将客户端代码与 *.vue 文件捆绑在一起。
我尝试了很多解决方案,但发现没有一个真正有效 - 即使是 tsConfig.json 中引用的 .d.ts
declare module '*.vue' {
import Vue = require('vue')
const value: Vue.ComponentOptions<Vue>
export default value
}
Run Code Online (Sandbox Code Playgroud)
有谁知道一个优雅的解决方案,或者我应该辞职而在服务器端使用 webpack 吗?(我有些犹豫,因为仅客户端编译的编译已经很慢了)
在使用新的TypeScript功能(即所谓的ES Dynamic Imports)时,我无法使用服务器端运行我的同构应用程序的代码ts-node.
使用webpack模块加载器时,似乎没有出现错误,该加载器以自己的方式转换代码并在浏览器中运行生成的文件.
我得到的错误:
case 0: return [4 /*yield*/, import("./component/main")];
^^^^^^
SyntaxError: Unexpected token import
Run Code Online (Sandbox Code Playgroud)
通常TypeScript将import表达式转换为类似的东西:Promise.resolve(require("./component/main"))但我在那里看不到它.
如何解决?它有什么共同之处ts-node吗?或者有一个"polyfill" node.js?
我的tsconfig.json档案:
{
"compilerOptions": {
"declaration": false,
"emitDecoratorMetadata": true,
"allowJs": false,
"experimentalDecorators": true,
"importHelpers": true,
"inlineSourceMap": false,
"inlineSources": false,
"lib": [
"DOM",
"ES5",
"ES6",
"ES7"
],
"listFiles": false,
"module": "commonjs",
"noEmitOnError": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"preserveConstEnums": false,
"pretty": false,
"removeComments": false,
"strict": true,
"target": "es5"
} …Run Code Online (Sandbox Code Playgroud) 有没有人知道在打字稿中用ts-node设置测试的正确方法是让Mocha和Chai和Sinon全部被识别,而不需要在每个测试文件中手动导入?我有项目中包含的所有类型定义,包括mocha,sinon,chai.我有以下(它正常工作和运行测试):
mocha.opts:
--require ts-node/register
--option value spec/**/*.spec.ts
--require spec/bootstrap/test-setup.js
--recursive
--retries 0
--sort
--timeout 10000
--ui bdd
Run Code Online (Sandbox Code Playgroud)
package.json中的测试脚本:
"test": "yarn build && NODE_ENV=test nyc mocha ./spec/bootstrap/test-helper.js --opts ./spec/mocha.opts"
Run Code Online (Sandbox Code Playgroud)
我有2个辅助方法(出于某种原因,我必须在JS中做)
测试setup.js:
require('mocha');
var chai = require('chai');
chai.use(require('chai-as-promised'));
chai.use(require('sinon-chai'));
global.expect = chai.expect;
global.Promise = require('bluebird');
Run Code Online (Sandbox Code Playgroud)
测试helper.js:
const sinon = require('sinon');
const _ = require('lodash');
const db = require('../../src/models');
before(() => {
global.sandbox = sinon.sandbox.create();
});
afterEach(function () {
global.sandbox.restore();
});
after(() => {
db.default.sequelize.close();
});
Run Code Online (Sandbox Code Playgroud)
最后一个用于测试设置的垃圾规范:
describe('app', () => {
const bar …Run Code Online (Sandbox Code Playgroud) 我需要lodash-es在我的打字稿项目中使用,但是我无法正确配置它,它总是报告错误,例如SyntaxError: Unexpected identifier
你好
import upperCase from 'lodash-es/upperCase'
console.log('Hello ' + upperCase('typescript') + '!');
Run Code Online (Sandbox Code Playgroud)
package.json
{
"scripts": {
"demo": "ts-node hello.ts"
},
"dependencies": {
"lodash-es": "4.17.11"
},
"devDependencies": {
"@types/lodash-es": "4.17.1",
"ts-node": "7.0.0",
"typescript": "3.0.1"
}
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs"
}
}
Run Code Online (Sandbox Code Playgroud)
运行时ts-node hello.ts,它将报告错误,例如:
/typescript-use-lodash-es-demo/node_modules/lodash-es/upperCase.js:1
(function (exports, require, module, __filename, __dirname) { import createCompounder from './_createCompounder.js';
^^^^^^^^^^^^^^^^
SyntaxError: Unexpected identifier
at new Script (vm.js:79:7)
at createScript (vm.js:251:10)
Run Code Online (Sandbox Code Playgroud)
我还针对此问题设置了一个小型演示,您可以根据需要克隆并尝试:https : …
我正在寻找一种工具来对 TypeScript Node.js 应用程序进行分析,而无需修改整个代码源。
我的意思是分析:使用某些特定工具启动应用程序,其输出结果如下:
方法 | 消耗内存| 消耗的时间
() | 1024 | 20 毫秒……
我做了一些互联网研究,发现了这个:https : //github.com/screepers/screeps-typescript-profiler
但是使用它,我不得不编辑整个代码(通过添加@Profiler 装饰器),我正在寻找一些可以自动检测方法的东西。
谢谢你的帮助!
我有一个非常基本的 Express 服务器设置,使用 NodeJS/Express + Nodemon。我使用 WebStorm 作为我的 IDE。
运行调试/检查脚本时,我的应用程序抛出编译时错误。按照此处的说明并了解此处的帖子,我的(简化版)package.json如下所示:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "nodemon src/app.ts",
"debug": "nodemon --inspect=127.0.0.1:9229 src/app.ts"
},
"devDependencies": {
"@types/express": "^4.17.9",
"@types/node": "^14.14.19",
"nodemon": "^2.0.6",
"ts-node": "^9.1.1",
"typescript": "^4.1.3"
}
Run Code Online (Sandbox Code Playgroud)
当我运行时npm run debug,我收到以下错误:
我还尝试了以下方法,结果都相同:
"debug": "nodemon --inspect src/app.ts""debug": "nodemon --inspect=0.0.0.0:9229 src/app.ts"任何想法为什么会发生这个错误?
该命令npm run dev不会生成错误。经过进一步调查,nodemon 在定位文件时会自动替换 ts-node .ts。反过来,ts-node建议通过注册 ts-node 并使用 node 命令运行服务器来进行调试。
如果您需要使用高级 node.js …
如何运行导入 css 模块的脚本?
我正在编写一个打字稿迁移脚本,我想通过ts-node. 理想情况下,我的代码库的组织方式应使脚本的依赖项永远不会接触 React 组件,但事实并非如此。该脚本最终导入 React 组件并因此导入 css 模块,因此ts-node失败,因为它不理解 css 模块:
RenderableInline.tsx(4,20): error TS2307: Cannot find module './styles/RenderableInline.module.scss' or its corresponding type declarations.
Run Code Online (Sandbox Code Playgroud)
只有 webpack 知道如何构建 css 模块,因为我已经通过css-loader.
我发现的唯一先例是 jest,它有一些用于模拟 css 模块的配置选项,因此它可以毫无错误地导入这些文件: https: //jestjs.io/docs/webpack。
如何运行依赖于 css 模块的 typescript 脚本?有什么办法可以通过 做到这一点ts-node吗?或者webpack有一些脚本运行功能吗?
我有这个简单的代码来尝试工作线程。
// thread.ts
import { Worker, isMainThread } from 'worker_threads';
if (isMainThread) {
const worker = new Worker(__filename);
} else {
console.log('hello from worker');
}
Run Code Online (Sandbox Code Playgroud)
显然,当我尝试使用 运行该文件时ts-node thread.ts,出现此错误:
(node:13200) 警告:要加载 ES 模块,请在 package.json 中设置 "type": "module" 或使用 .mjs 扩展名。
语法错误:无法在模块外部使用 import 语句
但是如果我手动编译并调用该文件tsc && dist/thread.js,它就可以正常工作
我尝试进一步实验,如果我将要在工作线程内运行的代码放在外部文件中,那么它也可以正常工作
// thread.ts
import { Worker, isMainThread } from 'worker_threads';
const worker = new Worker('./src/worker.ts');
Run Code Online (Sandbox Code Playgroud)
这是我的 tsconfig.json
{
"compilerOptions": {
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript …Run Code Online (Sandbox Code Playgroud) 假设我们有两个具有以下结构的node.js项目:

Foo 项目通过在其 中声明以下内容将 Bar 作为依赖项package.json:
{
"scripts": {
"start": "ts-node src/index.ts --transpile-only --no-lazy"
},
"dependencies": {
"bar": "file:../Bar"
}
}
Run Code Online (Sandbox Code Playgroud)
我使用以下命令配置 VSCode 的调试器launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "start",
"request": "launch",
"runtimeArgs": [
"start"
],
"runtimeExecutable": "npm",
"smartStep": true,
"type": "node"
}
]
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我在调试期间进入从 Bar 导入的函数时,无论我将 Bar 的包入口定义为或,它都会进入临时编译的 js 源而不是原始的 TypeScript 源。此外,如果我在 Bar 的打字稿源中添加断点,它们甚至不会被加载。如何让调试器加载 Bar 的断点,并在调试 Foo 时直接进入 TypeScript 源?我应该修改 中的一些属性,还是在启动脚本中将更多选项传递给 ts-node ?
为了更好地说明这个问题,我将两个演示项目上传到了 GitHub:StackOverflow-Demomain …
node.js typescript visual-studio-code ts-node vscode-debugger