Webpack,多个入口点Sass和JS

LeB*_*eau 23 javascript sass entry-point webpack

下面是我的webpack配置.此时文件加载此main.js入口点

import './resources/assets/js/app.js';
import './resources/assets/sass/main.scss';
Run Code Online (Sandbox Code Playgroud)

我可以在public/js文件中获取这两个文件,但我想在自己的文件夹中获取css和js.这可能吗?

var webpack = require('webpack');
var path = require('path');
let ExtractTextPlugin = require("extract-text-webpack-plugin");
var WebpackNotifierPlugin = require('webpack-notifier');

module.exports = {

    resolve: {
    alias: {
      'masonry': 'masonry-layout',
      'isotope': 'isotope-layout'
    }
  },

    entry: './main.js',
    devtool: 'source-map',
    output: {
        path: path.resolve(__dirname, './public'),
        filename: 'bundle.js'
    },

    module: {
        rules: [

         {  test: /\.js$/, 
                exclude: /node_modules/, 
                loader: "babel-loader?presets[]=es2015",

             },

            {
                test:/\.scss$/,
                use: ExtractTextPlugin.extract({
                    use: [{loader:'css-loader?sourceMap'}, {loader:'sass-loader', options: {
                    sourceMap: true
                }}],

                })
            },

            /*{
        test    : /\.(png|jpg|svg)$/,
        include : path.join(__dirname, '/dist/'),
        loader  : 'url-loader?limit=30000&name=images/[name].[ext]'
    }, */

            {
                 test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
          }
          // other vue-loader options go here
        }
      },



        ]
    },

    plugins: [

        //new webpack.optimize.UglifyJsPlugin(),
        new ExtractTextPlugin('app.css'),
        new WebpackNotifierPlugin(),

    ]

};
Run Code Online (Sandbox Code Playgroud)

Iva*_*van 24

是的,你可以这样做,这是一个不需要你导入js文件中的sass文件的例子:

const config = {
    entry: {
        main: ['./assets/js/main.js', './assets/css/main.scss'],
    },
    module: {
        rules: [
            {test: /\.(css|scss)/, use: ExtractTextPlugin.extract(['css-loader', 'sass-loader'])}
            // ...  
        ],
    },
    output: {
        path: './assets/bundles/',
        filename: "[name].min.js",
    },
    plugins: [
        new ExtractTextPlugin({
            filename: '[name].min.css',
        }),
        // ...
    ]
    // ...
}
Run Code Online (Sandbox Code Playgroud)

你最终应该./assets/bundles/main.min.js./assets/bundles/main.min.css.您必须明显添加js规则.


olo*_*ore 18

我们有多个入口点和输出,并按如下方式定义它们:

entry: {
    'js/main.min.js': './resources/assets/js/app.js', 
    'css/main.min.scss': './resources/assets/sass/main.scss'
},
output: {  
    filename: path.resolve(__dirname, './public/assets/[name]')
},
Run Code Online (Sandbox Code Playgroud)

webpack读取条目的键并将它们替换为[name]输出文件名中的标记.请参阅"输出文件名"的文档


小智 3

我有类似的需求,不确定这是否是正确的方法,但它对我有用。

output: {
        path: path.join(__dirname, './public/js'),
        filename:'bundle.js'
    },
Run Code Online (Sandbox Code Playgroud)

然后对于CSS:

plugins: [
    new ExtractTextPlugin("../css/[name].css")
],
Run Code Online (Sandbox Code Playgroud)