Невозможно прочитать исходную карту из нестандартного местоположения - PullRequest
0 голосов
/ 15 апреля 2019

У меня проблемы с получением исходных карт для работы с Webpack и TypeScript, когда мои исходные коды / пакеты находятся в нестандартных местах.Если они находятся в стандартных папках ./src и ./dist, все работает нормально.Если я перенесу свои исходные файлы в каталоги с ссылками на ./Scripts/src и ./Scripts/dist соответственно и получу следующую ошибку:

SourceMap http://localhost:56154/Scripts/dist/bundle.js.map read failed: One or more errors occurred..

Единственное, что я изменил между работой и неработанием, этоScripts каталог.

В частности, вот соответствующие файлы до и после изменений:

До (Работать)

webpack.config.js

'use strict';

const path = require('path');

module.exports = {
    mode: 'development',
    context: path.resolve(__dirname, 'src'),
    resolve: {
        extensions: ['.js', '.jsx', '.ts', '.tsx']
    },
    entry: "./index.tsx",
    output: {
        publicPath: '/dist/',
        path: path.resolve(__dirname, './dist'),
        filename: 'bundle.js'
    },

    // Enable sourcemaps for debugging webpack's output.
    devtool: "source-map",

    module: {
        rules: [
            // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
            { test: /\.tsx?$/, loader: "awesome-typescript-loader" },

            // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
            { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
        ]
    },
    externals: {
        "react": "React",
        "react-dom": "ReactDOM"
    }
};

tsconfig.json

{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es5",
        "lib": ["es5", "es6", "dom"],
        "jsx": "react"
    },
    "include": [
        "./src/**/*"
    ]
}

Default.aspx

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    ...
</head>
<body>
    ...

    <div id="example"></div>

    <!-- Dependencies -->
    <script type="text/javascript" src="./node_modules/react/umd/react.development.js"></script>
    <script type="text/javascript" src="./node_modules/react-dom/umd/react-dom.development.js"></script>

    <!-- Main -->
    <script type="text/javascript" src="./dist/bundle.js"></script>

</body>
</html>

После

webpack.config.js

'use strict';

const path = require('path');

module.exports = {
    mode: 'development',
    context: path.resolve(__dirname, 'Scripts/src'),
    resolve: {
        extensions: ['.js', '.jsx', '.ts', '.tsx']
    },
    entry: "./index.tsx",
    output: {
        publicPath: '/Scripts/dist/',
        path: path.resolve(__dirname, './Scripts/dist'),
        filename: 'bundle.js'
    },

    // Enable sourcemaps for debugging webpack's output.
    devtool: "source-map",

    module: {
        rules: [
            // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
            { test: /\.tsx?$/, loader: "awesome-typescript-loader" },

            // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
            { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
        ]
    },
    externals: {
        "react": "React",
        "react-dom": "ReactDOM"
    }
};

tsconfig.json

{
    "compilerOptions": {
        "outDir": "./Scripts/dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es5",
        "lib": ["es5", "es6", "dom"],
        "jsx": "react"
    },
    "include": [
        "./Scripts/src/**/*"
    ]
}

Default.aspx

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    ...
</head>
<body>
    ...

    <div id="example"></div>

    <!-- Dependencies -->
    <script type="text/javascript" src="./node_modules/react/umd/react.development.js"></script>
    <script type="text/javascript" src="./node_modules/react-dom/umd/react-dom.development.js"></script>

    <!-- Main -->
    <script type="text/javascript" src="./Scripts/dist/bundle.js"></script>

</body>
</html>

TL; DR

Если я изменю путь только в следующих местах, моя исходная картаперерывы:

webpack.config.js

context: path.resolve(__dirname, '[Scripts/]src'),
output: {
    publicPath: '/[Scripts/]dist/',
    path: path.resolve(__dirname, './[Scripts/]dist')
}

tsconfig.json

"compilerOptions": {
    "outDir": "./[Scripts/]dist/"
},
"include": [
    "./[Scripts/]src/**/*"
]

По умолчанию.aspx

<script type="text/javascript" src="./[Scripts/]dist/bundle.js"></script>

Что еще мне нужно изменить?

1 Ответ

0 голосов
/ 16 апреля 2019

Когда я попытался перейти к файлу карты напрямую, я получил ошибку конфигурации 500.19:

Этот раздел конфигурации нельзя использовать по этому пути.Это происходит, когда раздел заблокирован на родительском уровне.Блокировка либо по умолчанию (overrideModeDefault = "Deny"), либо устанавливается явно с помощью тега местоположения с помощью overrideMode = "Deny" или устаревшего allowOverride = "false".

Поиск в моем файле Web.configфайл, я заметил, у нас был следующий раздел конфигурации:

<location path="Scripts">
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication enabled="true" />
      </authentication>
    </security>
  </system.webServer>
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>

Удаление, которое устранило проблему.Однако нам нужен этот раздел для работы с другими частями приложения.Поэтому вместо этого я пошел к <solutionDir>\.vs\config\applicationhost.config и внес следующие изменения:

  • установить configuration/configSections/sectionGroup[name="system.webServer"]/sectionGroup[name="security"]/sectionGroup[name="authentication"]/section[name="anonymousAuthentication", overrideModeDefault="allow"] (было "deny")
  • в конце, установить configuration/location[path=<webAppProject>]/system.webServer/security/authentication/anonymousAuthentication[enabled="true"] (было false)

Это удовлетворительно решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...