【问题标题】:In Webpack, how to get multiple outputs with a single entry main.js(having multiple css files inside files)?在 Webpack 中,如何使用单个条目 main.js(在文件中有多个 css 文件)获得多个输出?
【发布时间】:2017-08-03 09:00:43
【问题描述】:

我的目录结构应该是这样的。

|-src/
|   |-styles/ (less)
|   |   |-xx.less(input inside main.js)
|   |   |-yy.less(input inside main.js)
|   |   |-zz.less(input inside main.js)
|
|-dist/  
    |-assets/
    |   |-xx.css(output should be like this)
    |   |-yy.css(output should be like this)
    |   |-zz.css(output should be like this)

我的 main.js 文件包含,

require('./styles/xx.less');
require('./styles/yy.less');
require('./styles/zz.less');

我的切入点是

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

1。如何获得块输出(xx.css,yy.css,zz.css)? 2. 在那里尝试了 extractTextPlugin 我能够以 app.css 的名称获得输出,但不是我想要的。 我可以尝试使用哪个插件提取与 main.js 文件中相同名称和输入数量的输出?

【问题讨论】:

    标签: javascript css webpack less webpack-plugin


    【解决方案1】:

    您可以将您的 css 要求分离到文件和它们的入口点中。 例如:

    xx.less.js

    require('./styles/xx.less');
    

    在 webpack 条目中:

    app: [path.join(__dirname, 'path/to/xx.less.js')]
    

    并使用节点脚本或其他东西多次调用webpack

    更详细的答案:

    webpack 配置中的每个条目都代表将要创建的捆绑文件,起点 js 文件的入口点,每个 css 文件都将根据该 js 文件中 css 的引用创建。

    因此,如果您想要多个 css 文件,您需要在 webpack 配置中添加多个条目,并且条目中的每个 js 都需要较少的文件,这样您将获得 3 个 js 文件和 3 个 css 文件,因此您的配置应该看起来像这个:

    {
            entry: {
                xx: [ path.resolve(__dirname, 'path/to/js/xx.js')],
                yy: [ path.resolve(__dirname, 'path/to/js/yy.js')],
                zz: [ path.resolve(__dirname, 'path/to/js/zz.js')]
            },
    
            output: {
                path: path.resolve(__dirname, 'dist/assets'),
                filename: '[name].js' //the placeholder name will be replace by the entry name (xx,yy,zz)
            }
    
            ...
    
            plugins: [
                new ExtractTextPlugin({
                    filename: '[name].css' //this is the name of the css according to the entry in the js file
                })
    }
    

    你的less加载器应该保持不变,只指向所有less文件所在的src/styles,在你的javascript文件(xx.js,yy.js,zz.js)中,你应该需要相应的less文件

    在 xx.js 中你调用 xx.less:require('./styles/xx.less');

    在 yy.js 中你调用 yy.less:require('./styles/yy.less');

    在 zz.js 中调用 zz.less:require('./styles/zz.less');

    当你运行 webpack 时,他会生成 3 个 css 文件(和 3 个 js 文件......)

    【讨论】:

    • 你好,但是如果我们有多个入口点,我们不是也会得到多个 bundle.js 文件吗?
    • 不,实际上我只是想要最小化的单独的多个 CSS 文件作为输出,因为我会将它直接链接到我的 Html,不需要 JS 包。谢谢
    • 所以这将为您创建文件 - 只需忽略 js 文件 - 我认为您不能创建 js 文件,因为这是 webpack“compelation”所依赖的基本实体跨度>
    • 谢谢你,现在我正在使用suppress-chunks-webpack-plugin来忽略js文件,只保留css文件。
    • 由于我的声望小于 15 堆栈溢出不要让我投票。对不起
    猜你喜欢
    • 2019-09-04
    • 2019-05-23
    • 2023-03-06
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2015-11-01
    • 2023-03-22
    相关资源
    最近更新 更多