【问题标题】:Webpack - Copy images filesWebpack - 复制图像文件
【发布时间】:2016-05-20 16:12:21
【问题描述】:

我目前正在使用 Webpack 打包我们的 Angular2 应用程序,但遇到了一个问题。

我已经阅读了几个文档,但我无法使用文件加载器在我的输出目录中复制一些文件。

这是我当前的文件层次结构:

config
  | - webpack.common.js   
app        
  |- static
      | - css
           | - ...
      | - fonts
           | - ...
      | - img
           | - someimage.png
           | - anotherimage.png
  |- main.ts

和(完整的)webpack.common.js:

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

module.exports = {    
    entry: { 
      app: './app/main.ts',
    },
    output: {
        filename: 'js/[name].js',
        path:'./built',
        chunkFilename: 'bundles/[id].chunk.js'
    },


    module: {
        loaders: [
        {
            test: /\.ts$/,
            loader: 'ts',
            exclude:'./out/'
        },
        {           
             test: /\.(jpe?g|png|gif|svg)$/i,
             include: [
                 path.resolve(__dirname, '/app/static/img/'),
              ],
             loader: 'file?name=[path][name].[ext]&context=./src',

        }
        ]
    },

     resolve: {
         extensions: ['', '.js', '.ts', '.gif']
    },


     plugins: [
         new HtmlWebpackPlugin({
             template: './index.html'
         })
    ]
}

要执行 webpack,我播放命令:

webpack --config Config/webpack.common.js  --bail

ts 文件被正确地转译成 javascript 并复制到输出目录,index.html 文件也存在,但没有我的图像文件。

我认为我的配置文件有问题,但我看不到是什么。我已经为此努力了好几个小时,所以任何帮助都将不胜感激。

谢谢

【问题讨论】:

    标签: javascript webpack commonjs webpack-file-loader


    【解决方案1】:

    为图像创建单独的入口点可能不是您想要的,这取决于您如何构建项目的 CSS 部分。作为替代方案,您可以使用 copy-webpack-plugin 或 grunt / gulp 任务复制静态文件。

    【讨论】:

      【解决方案2】:

      您应该使用 url-loader 来加载图像。示例代码如下。

      {
        module: {
          loaders: [
            { test: /\.(jpe?g|png|gif|svg)$/i, loader: 'url?limit=10000!img?progressive=true' }
          ]
        }
      }
      

      你是指你的入口js文件里面的gif文件还是对应的css/sass文件。

         entry: { 
            app: './app/main.ts',
          }
      

      Webpack 会加载所有在入口点有引用的文件。如果您的所有文件都不在一个入口点。然后你可以添加多个入口点,如下所示。

         entry: { 
            app: './app/main.ts',
            image: './app/something.ts'
          }
      

      另外,我会将 webpack.config.js 文件直接放在根目录中,以便更好地访问整个生态系统。尝试将其从配置文件夹移动到根文件夹。

      【讨论】:

      • 我尝试使用 url-loader,但结果完全相同。它的行为就像找不到 gif 文件一样(我在日志中没有提到这个文件 - 即使在详细模式下也是如此)。路径和/或上下文定义可能有问题。
      • 这意味着它适用于其他图像类型。只有 gif 文件有问题吗?
      • 不,它不适用于我的任何类型的“静态”文件(不仅是 gif)。例如,不复制 woff 文件
      • 它有效;按照您的建议,我添加了一个包含单个图像的条目,并且文件已成功复制(使用文件加载器和 url-loader)entry: { appli: './app/main.ts', images : './app/static/img/background.png' } 。谢谢
      • 不错。您不必仅为图像创建另一个入口点。我相信您一定在 less/sass/css 文件中使用这些图像。然后您需要将该特定文件添加到 /app/main.ts 的入口点,然后这些图像将被自动转译。
      猜你喜欢
      • 2018-07-20
      • 1970-01-01
      • 2020-03-14
      • 2016-07-05
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 2016-12-31
      相关资源
      最近更新 更多