如何让源映射在 Angular 4 和 Laravel 5.6 中工作(构建后缺少 .map 文件)

How to get source maps working in Angular 4 and Laravel 5.6 (.map files are missing after build)

我继承了 Laravel 和 Angular 应用程序,我正在努力跟上进度。

我 运行 一个 shell 脚本,基本上将所有内容编译到项目的 ./public 文件夹中,nginx 从那里为应用程序提供服务。

这是构建一切的脚本:

./compile-js.sh

rm -rf ./public/*.{js,css,svg,woff2,ttf,woff,eot,map,json,html,txt}* ./public/fonts ./public/images ./angular-app/dist/
cd ./angular-app/
yarn install
yarn run build:dev
rm -f ./dist/*.{txt,map} #{txt,map}
cd ../
cp -r ./angular-app/dist/* ./public/

cssTemplate=./resources/views/angular/angular-css.blade.php
jsTemplate=./resources/views/angular/angular-js.blade.php

beginJs='<script type="text/javascript" src="'
endJs='"></script>'

beginInlineJs='<script type="text/javascript">'
endInlineJs='</script>'

beginStyle='<link rel="stylesheet" href="'
endStyle='"/>'

truncate -s 0 "$jsTemplate"
truncate -s 0 "$cssTemplate"

src="$(cat ./public/inlin*.bundle.js)"
echo "$beginInlineJs$src$endInlineJs" >> "$jsTemplate"

src="$(find ./public/ -name 'script*.bundle.js' -type f -exec basename {} \;)"
echo "$beginJs$src$endJs" >> "$jsTemplate"

src="$(cat ./public/sw-registe*.bundle.js)"
echo "$beginInlineJs$src$endInlineJs" >> "$jsTemplate"

src="$(find ./public/ -name 'polyfill*.bundle.js' -type f -exec basename {} \;)"
echo "$beginJs$src$endJs" >> "$jsTemplate"

src="$(find ./public/ -name 'vendo*.bundle.js' -type f -exec basename {} \;)"
echo "$beginJs$src$endJs" >> "$jsTemplate"

src="$(find ./public/ -name 'mai*.bundle.js' -type f -exec basename {} \;)"
echo "$beginJs$src$endJs" >> "$jsTemplate"

src="$(find ./public/ -name 'style*.bundle.css' -type f -exec basename {} \;)"
echo "$beginStyle$src$endStyle" >> "$cssTemplate"

这是脚本:

./angular-app/package.json

"build": "ng build --env=prod --prod --aot --output-path ./dist",
"build:dev": "ng build --sourcemap=true --extract-css --env=dev --output-path ./dist",

我今天刚刚将 shell 脚本更改为 yarn run build:dev(之前在生产模式下 运行ning,调试非常困难)。现在,Chrome Dev Tools 报告检测到源映射,但我也在控制台中看到:

DevTools failed to parse SourceMap: https://1.bundle.js.map
DevTools failed to parse SourceMap: https://2.bundle.js.map
DevTools failed to parse SourceMap: https://3.chunk.js.map

我看到 ./public 文件夹中没有 .map 个文件,所以这可能就是我看到这个的原因。

我应该在哪里让 Webpack 创建地图文件?

找到答案了。原因在显示的 ./compile-js.sh 文件中。

这里是罪魁祸首:

rm -f ./dist/*.{txt,map} #{txt,map}

它正在创建地图文件,然后在将所有内容复制到 ./public 之前将其删除。

将其更改为这个并修复了它:

rm -f ./dist/*.{txt} #{txt}

我现在也在使用这个开发脚本:

"build:dev": "ng build --source-map --aot --extract-css --env=dev --output-path ./dist",

我不会删除这个问题,而是保留它,因为搜索 Google 有关此内容的信息非常糟糕。也许有一天它会对某人有所帮助。