2016-11-22 16 views
5

Trong dự án webue vue (2.0) + của tôi, tôi cấu hình vue-html-loader, nhưng trong tệp .vue img của tôi không thể tải hình ảnh src tĩnh. Dưới đây là cấu hình webpack của tôi:vue + webpack dự án img không thể tải tĩnh src

module: { 
    loaders: [ 
     ... 
     { 
      test: /\.html$/, 
      exclude: /node_modules/, 
      loaders: ['html', 'html-minify'] 
     } 
     , { 
      test: /\.vue$/, 
      loader: 'vue' 
     } 
     ... 
    ] 
}, 
vue: { 
    ... 
    html: { 
     root: path.resolve(__dirname, './source/static'), 
     attrs: ['img:src', 'img:srcset'] 
    }, 
    loaders: { 
     css: ExtractTextPlugin.extract("css"), 
     sass: ExtractTextPlugin.extract("css!sass") 
    } 
}, 
resolve: { 
    root: [ 
     path.resolve('./source') 
    ], 
    extensions: ['', '.js', '.json', '.scss', '.html', '.css', '.vue'], 
    alias: { 
     'vue': 'vue/dist/vue.js' 
    } 
}, 

Dưới đây là tập tin .vue tôi:

<img src="/web/img/[email protected]" srcset="/web/img/[email protected]" /> 

Trình duyệt của tôi luôn luôn đi ra lỗi 404. Có ai đó có cùng một vấn đề không?

+0

Tôi nghĩ bạn cần 'trình tải url' cho hình ảnh tĩnh. Tôi khuyên bạn nên sử dụng mẫu [webpack] (https://github.com/vuejs-templates/webpack) được sử dụng bởi 'vue-cli'. Xem https://github.com/vuejs-templates/webpack/blob/master/template/build/webpack.base.conf.js#L70 – Phil

+0

@Phi Ihave đã thêm trình tải url, lỗi không hoạt động. – Yuga

Trả lời

0

Tôi đã sau trong cấu hình webpack của tôi, mà làm việc cho tôi:

module: { 
    rules: [ 
     { 
     test: /\.vue$/, 
     loader: 'vue', 
     options: vueConfig 
     }, 
     { 
     test: /\.js$/, 
     loader: 'babel', 
     exclude: /node_modules/ 
     }, 
     { 
     test: /\.(png|jpg|gif|svg)$/, 
     loader: 'url', 
     options: { 
      limit: 10000, 
      name: '[name].[ext]?[hash]' 
     } 
     } 
    ] 
    } 

tôi có hình ảnh trong thư mục src/assets mà tôi có thể truy cập và hiển thị mà không cần bất kỳ thiết lập cụ thể.

+0

Bạn đã thêm thuộc tính "srcset" vào thẻ img chưa? – Yuga

0

Tôi muốn thêm một bí danh cho thư mục img tĩnh của bạn trong vòng bí danh webpack của bạn, ví dụ:

resolve: { 
    ... 
    alias: { 
    'vue': 'vue/dist/vue.js', 
    'img': path.resolve(__dirname, '../web/img') // or wherever it is located relative to this file 
    } 
} 

bây giờ bạn có thể tham khảo hình ảnh tĩnh thông qua ~img, tức là

<img src="~img/[email protected]" srcset="~img/[email protected]" /> 

Để đảm bảo bạn có thể phân tích cú pháp bên trên trong html của mình, bạn cần phải thêm trình tải vue-html vào cấu hình webpack của mình:

module: { 
    loaders: [ 
    ... 
    { 
     test: /\.html$/, 
     loaders: 'vue-html' 
    } 

Tôi sẽ chỉ thay thế trình tải html hiện tại của bạn bằng cách ở trên.

Tuy nhiên tất cả điều này sang một bên - do sự phức tạp của giàn giáo một ứng dụng webpack vue rắn Tôi muốn strongely khuyên bạn nên cài đặt các vue-cli: https://github.com/vuejs/vue-cli

Sau đó, bạn chỉ có thể tung ra một thử nghiệm và chức năng webpack môi trường:

https://github.com/vuejs-templates/webpack

Chỉ cần sao chép đơn đăng ký của bạn vào môi trường đó. Bạn có thể sẽ phải làm một chút refactoring nhưng thời gian tiết kiệm trên thiết lập là hoàn toàn giá trị nó.

+0

Tôi đã làm như bạn nói, nhưng trong trình duyệt, thuộc tính srcset không thể phân tích cú pháp ~ img, nó xử lý "~ img" như một phần chuỗi của url. – Yuga

+0

câu trả lời được cập nhật để xem cấu hình trình tải của bạn – GuyC

Các vấn đề liên quan