首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >webpackHtmlPlugin:控制注入文件的顺序

webpackHtmlPlugin:控制注入文件的顺序
EN

Stack Overflow用户
提问于 2016-03-01 14:21:04
回答 3查看 10.5K关注 0票数 11

我用HtmlWebpackPlugin自动生成index.thml,输出webpack编译。

出于性能原因,我将条目拆分为供应商和项目。

就像这样:

代码语言:javascript
复制
...
entry:{
    vendors:'./vendors.js'
    ,TimerApp:'./src/index.js'

},
output:{
    path: path.join(__dirname,'build'),
    filename:'[name].js'
},
...

当我用webpack-dev-server运行这个项目时

set NODE_ENV=development && webpack-dev-server -d --hot --port 4040 --content-base src/"

我得到了index.html

代码语言:javascript
复制
<head>
...
    <title>Timer Task</title>
    <link href="vendors.css"  rel="stylesheet">
    <link href="TimerApp.css" rel="stylesheet">
</head>
<body >
 ...
<script src="vendors.js"></script>
<script src="TimerApp.js"></script>

verdor.js第一,TimerApp.js第二。还有那个完美的。

但是..。当我用webpack时:

webpack --colors --watch --optimize-dedupe

顺序是TimerApp.js,其次是vendors.js,每次编译项目时都会出现异常。

非常恼怒。

那么,如何控制输出文件的顺序呢??

参考:webpack.js文件:

代码语言:javascript
复制
var path = require('path');
var webpack = require('webpack');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var ngAnnotatePlugin = require('ng-annotate-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');

var exportRunTimeVariable = new webpack.DefinePlugin({
   MODE: {
    production: process.env.NODE_ENV === 'production'
   }
});

var extractSCSS =  new ExtractTextPlugin("[name].css");

module.exports = {
    watch: true,
    devtool: 'source-map', /*devtool: 'inline-source-map'*/
    context: __dirname, /*for node key*/
    node:{
        __filename:true,
        __dirname:true
    },
    resolve: {
        root:[
            path.resolve('src')
            ,path.resolve('node_modules')
            ,path.resolve('bower_components')
        ]
        //root: __dirname + '/src'
    },
    entry:{
        vendors:'./vendors.js'
        ,TimerApp:'./src/index.js'

    },
    output:{
        path: path.join(__dirname,'build'),
        filename:'[name].js'
    },
    module:{
        loaders:[
            /*
            test: A condition that must be met
            exclude: A condition that must not be met
            include: A condition that must be met
            loader: A string of "!" separated loaders
            loaders: A array of loaders as string
            */
            {test:/\.css$/,
                loader:extractSCSS.extract('style-loader?sourceMap','css-               loader!sass-loader')},

        {test: /\.scss$/,
            loader: extractSCSS.extract('style-loader?sourceMap','css-loader!sass-loader')},

        {test: /\.js$/,
            loader: 'ng-annotate',
            exclude: /node_modules|bower_components/},

        {test: /\.(woff|woff2|ttf|eot|svg)(\?]?.*)?$/,
            loader : 'file-loader?name=res/[name].[ext]?[hash]'
        },
        //{test: /index\.html$/,
        //    loader : 'file-loader?name=[name].[ext]'
        //},

        {test: /\.html$/,
            loader: 'raw'
            ,exclude:[/index.html/]},

        {test: /\.json/,
            loader: 'json'}

    ]
},
plugins: [
    extractSCSS,
    exportRunTimeVariable,
    new ngAnnotatePlugin({
        add: true
            // other ng-annotate options here
        }),
        new HtmlWebpackPlugin({
            title: 'Timer Task'
            //,filename: ''
            ,template: 'src/index.html'
        })
    ]
};
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-08 10:40:15

尝试使用排序函数设置chunksSortMode。

chunksSortMode:允许控制块在被包含到html之前应该如何排序。允许值:“无”、“自动”、“自动”、“依赖”、“{function}”-默认值:“自动”

https://github.com/ampedandwired/html-webpack-plugin

代码语言:javascript
复制
//...
new HtmlWebpackPlugin({
    title: 'Timer Task',
    template: 'src/index.html',
    chunksSortMode: function (a, b) {  //alphabetical order
      if (a.names[0] > b.names[0]) {
        return 1;
      }
      if (a.names[0] < b.names[0]) {
        return -1;
      }
      return 0;
    }
})
//...
票数 19
EN

Stack Overflow用户

发布于 2017-06-07 09:27:47

代码语言:javascript
复制
chunksSortMode: function (chunk1, chunk2) {
    var order = ['first', 'second', 'third'];
    var order1 = order.indexOf(chunk1.names[0]);
    var order2 = order.indexOf(chunk2.names[0]);
    return order1 - order2;  
}
票数 6
EN

Stack Overflow用户

发布于 2016-08-24 09:38:09

@panlilu的答案很好,但可以简化如下:

代码语言:javascript
复制
chunksSortMode: 'none'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35725384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档