Javascript Node Webpack eval()源映射
我正在努力用TypeScript设置一个节点项目。 我的工作流程是:使用nodemon运行节点脚本。节点脚本创建一个webpack编译器实例,并将文件系统设置为MemoryFS。网页包配置包括TypeScript和Babel的加载程序。 在webpack完成编译后,如果有错误,我抛出,如果没有,我用MemoryFS和eval()获取结果以运行代码 所有这些都很好。但我尝试添加sourcemaps支持。我在网页包中添加了一个横幅插件,添加了“源地图支持”。在webpack中,我将devtool设置为“源映射”。在tsconfig.json中,我启用了sourcemaps选项。在src/index.ts中,我只是抛出了一个错误,而在运行时节点没有告诉我错误发生在哪里。(源地图) 但如果我正常运行webpack,然后使用Javascript Node Webpack eval()源映射,javascript,node.js,typescript,webpack,babeljs,Javascript,Node.js,Typescript,Webpack,Babeljs,我正在努力用TypeScript设置一个节点项目。 我的工作流程是:使用nodemon运行节点脚本。节点脚本创建一个webpack编译器实例,并将文件系统设置为MemoryFS。网页包配置包括TypeScript和Babel的加载程序。 在webpack完成编译后,如果有错误,我抛出,如果没有,我用MemoryFS和eval()获取结果以运行代码 所有这些都很好。但我尝试添加sourcemaps支持。我在网页包中添加了一个横幅插件,添加了“源地图支持”。在webpack中,我将devtool设置
节点dist/bundle.js
运行它。它正在工作
我认为这是一个问题,因为我使用eval()来运行编译后的输出
src/index.ts:
console.log('Hello world');
throw new Error('not');
build.js:
const path = require('path');
const webpack = require('webpack');
const MemoryFS = require('memory-fs');
const fs = new MemoryFS();
const config = require('./webpack.config');
const compiler = webpack(config);
compiler.outputFileSystem = fs;
compiler.run((err, stats) => {
console.clear();
const jsonStats = stats.toJson();
if(jsonStats.errors.length > 0 || jsonStats.warnings.length > 0)
return console.log(jsonStats.warning, jsonStats.errors);
const result = fs.readFileSync(path.resolve(__dirname, 'dist', 'bundle.js')).toString();
eval(result);
});
webpack.config.js:
const path = require('path');
const webpack = require('webpack');
const SRC_DIR = path.resolve(__dirname, 'src');
const DIST_DIR = path.resolve(__dirname, 'dist');
module.exports = {
entry: SRC_DIR + '/index.ts',
output: {
path: DIST_DIR,
filename: 'bundle.js'
},
devtool: 'source-map',
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader'
},
{
test: /\.ts$/,
use: [
{ loader: 'babel-loader' },
{ loader: 'ts-loader' },
{ loader: 'tslint-loader' }
]
}
]
},
resolve: {
extensions: ['.ts', '.js', '.json']
},
target: 'node',
plugins: [
new webpack.BannerPlugin({
raw: true,
entryOnly: false,
banner: 'require("source-map-support").install();'
}),
new webpack.NoEmitOnErrorsPlugin()
]
};
正常运行webpack并执行代码(webpack&&node dist\bundle.js
,如预期)后:
谢谢你的帮助 当您使用
eval
运行代码时,节点将不知道源映射。也许您可以尝试运行子节点进程,而不是使用eval
来运行结果,或者您使用eval
有什么原因吗?请参见当您使用eval
运行代码时,节点将不知道源映射。也许您可以尝试运行子节点进程,而不是使用eval
来运行结果,或者您使用eval
有什么原因吗?我知道你的意思,但你能给我举个例子吗?我尝试使用child_process.execSync(`node${result}`)代码>但仍然没有成功。我只是在控制台中得到输出的代码,您必须实际运行我认为的文件-然后node知道在bundle.js.map
中查找源映射<代码>子进程.spawn('node',[DIST_DIR+'/bundle.js'])代码>可能?不,不行。只是没有指纹。我想这是因为我使用MemoryFS作为网页输出,因此我不能直接使用普通路径运行它。我本可以使用普通的fs
,但我不想在开发时将输出输出到目录。啊,你说得对,子进程无法从MemoryFS访问文件。您不能保存到os.tmpdir()
?也许有一种方法可以内联执行子进程?像节点
?我尝试对一个简单的案例node-console.log(5)
或node-console.log(5)
。您知道是否有一种内联执行节点命令的方法吗?如果有,你认为sourcemaps会提供吗?我知道你的意思,但是你能给我举个例子吗?我尝试使用child_process.execSync(`node${result}`)代码>但仍然没有成功。我只是在控制台中得到输出的代码,您必须实际运行我认为的文件-然后node知道在bundle.js.map
中查找源映射<代码>子进程.spawn('node',[DIST_DIR+'/bundle.js'])代码>可能?不,不行。只是没有指纹。我想这是因为我使用MemoryFS作为网页输出,因此我不能直接使用普通路径运行它。我本可以使用普通的fs
,但我不想在开发时将输出输出到目录。啊,你说得对,子进程无法从MemoryFS访问文件。您不能保存到os.tmpdir()
?也许有一种方法可以内联执行子进程?像节点
?我尝试对一个简单的案例node-console.log(5)
或node-console.log(5)
。您知道是否有一种内联执行节点命令的方法吗?如果有,您认为sourcemaps会提供吗?
C:\Users\shachar\Desktop\graph\dist\webpack:\src\index.ts:3
throw new Error('not');
^
Error: not
at Object.<anonymous> (C:\Users\shachar\Desktop\graph\dist\webpack:\src\index.ts:3:7)
at __webpack_require__ (C:\Users\shachar\Desktop\graph\dist\webpack:\webpack\bootstrap a6ba0885ca7e8b14ee63:19:1)
at C:\Users\shachar\Desktop\graph\dist\webpack:\webpack\bootstrap a6ba0885ca7e8b14ee63:62:1
at Object.<anonymous> (C:\Users\shachar\Desktop\graph\dist\bundle.js:67:10)
at Module._compile (module.js:573:30)
at Object.Module._extensions..js (module.js:584:10)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Function.Module.runMain (module.js:609:10)
Hello world
Error: not
at Object.eval (eval at compiler.run (C:\Users\shachar\Desktop\graph\build.js:23:5), <anonymous>:75:7)
at __webpack_require__ (eval at compiler.run (C:\Users\shachar\Desktop\graph\build.js:23:5), <anonymous>:21:30)
at eval (eval at compiler.run (C:\Users\shachar\Desktop\graph\build.js:23:5), <anonymous>:64:18)
at eval (eval at compiler.run (C:\Users\shachar\Desktop\graph\build.js:23:5), <anonymous>:67:10)
at compiler.run (C:\Users\shachar\Desktop\graph\build.js:23:5)
at emitRecords.err (C:\Users\shachar\Desktop\graph\node_modules\webpack\lib\Compiler.js:269:13)
at Compiler.emitRecords (C:\Users\shachar\Desktop\graph\node_modules\webpack\lib\Compiler.js:375:38)
at emitAssets.err (C:\Users\shachar\Desktop\graph\node_modules\webpack\lib\Compiler.js:262:10)
at applyPluginsAsyncSeries1.err (C:\Users\shachar\Desktop\graph\node_modules\webpack\lib\Compiler.js:368:12)
at next (C:\Users\shachar\Desktop\graph\node_modules\tapable\lib\Tapable.js:218:11)