javascript - 如何使用 webpack 在 Angular 应用程序中动态加载 Assets (pdf)?

标签 javascript angularjs typescript pdf webpack

我正在尝试将 pdf 加载到我在 webpack dev server 上运行的 Angular 应用程序中使用 HTML <object>data 标记属性。

由于pdf路径是在运行时生成的,并且是absolute喜欢C:\test.pdf .

它没有加载到 UI 中,而是 console记录错误 -

Not allowed to load local resource: file:///C:/test.jpeg

但是,应用程序的生产构建不在托管服务器上运行,而是作为静态 html 运行正常。此外,相对路径也可以正常工作。

如何加载 pdf 文件?

webpack.common.js

var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

const path = require('path');
const rootDir = path.resolve(__dirname, '..');

module.exports = {
resolve: {
    extensions: ['.js', '.ts'],
    modules: [rootDir, path.join(rootDir, "node_modules")]
},

module: {
    rules: [
        {
            test: /\.html$/,
            loader: 'html-loader'
        },
        {
            test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
            loader: 'file-loader?name=assets/[name].[ext]'
        },
        {
           test: /\.(scss|css)$/,
           use: [
                { loader: "style-loader" },
                { loader: "css-loader" },
                { loader: "sass-loader",
                    options: {
                        includePaths: ["node_modules/"]
                    }
                }
            ]
        }
    ]},
    plugins: [
        new webpack.optimize.CommonsChunkPlugin({
            name: ['app', 'vendor', 'polyfills']
        }),
        new HtmlWebpackPlugin({
            template: 'src/index.html'
        }),
        new webpack.ContextReplacementPlugin(
            /angular(\\|\/)core(\\|\/)@angular/,
            path.resolve(__dirname, '../src')
        )
    ]
};

webpack.dev.js

var webpackMerge = require('webpack-merge');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var commonConfig = require('./webpack.common.js');

const path = require('path');
const rootDir = path.resolve(__dirname, '..');

commonConfig.entry = {
    'polyfills': './src/polyfills.ts',
    'vendor': './src/vendor.ts',
    'app': './src/main.ts'
};

commonConfig.module.rules.unshift({
    test: /\.ts$/,
    loaders: ['awesome-typescript-loader', 'angular2-template-loader', 'angular-router-loader']
});

module.exports = webpackMerge(commonConfig, {

  devtool: 'cheap-module-eval-source-map',

  output: {
      path: path.resolve(rootDir, 'dist'),
      publicPath: 'http://localhost:8080/',
      filename: '[name].js',
          chunkFilename: '[name].chunk.js'
      },

      plugins: [
          new ExtractTextPlugin('[name].css')
      ],

      devServer: {
          historyApiFallback: true,
          stats: 'minimal'
      }
});

最佳答案

您可以告诉 devServer 从哪里提供文件。

devServer: {
  historyApiFallback: true,
  stats: 'minimal',
  contentBase: ['./dist', 'C:\\']
}

然后你可以用<... src="/file_name.ext" ... />加载你的文件

但我不建议添加 C:\作为 contentBase。如果可能,请为生成的 PDF 定义另一个输出目录。

关于javascript - 如何使用 webpack 在 Angular 应用程序中动态加载 Assets (pdf)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47525724/

相关文章:

javascript - 我想制作一个在滚动时触发 css 动画的网站,没有垂直或水平移动。这可能吗?

javascript - 我需要默认在组合框中显示文本 "Select the one"

javascript - 如何使用 JavaScript 隐藏/显示 div 标签?

angularjs - 如何将 ng-repeat 中的最后一项返回到 Controller

javascript - 仅当代码在 3 秒内未执行时才执行 block

javascript - 使用 Jasmine 测试 Angular2/TypeScript 管道

postgresql - 迁移文件中的 NestJS TypeORM 语法错误

javascript - JavaScript版本?

javascript - 这段 JavaScript 代码有什么问题?我从服务器获取了我没有响应的额外内容

typescript - Angular2/Typescript - 获取服务器延迟