3

这是我当前的文件夹结构:

-- src
   -- js
      -- page 1
         -- index.js
         -- actions
         -- components
         -- reducers
      -- page 2
         -- index.js
         -- actions
         -- components
         -- reducers
      -- page 3
         -- index.js
         -- actions
         -- components
         -- reducers

这是我的 webpack.config.js:

module.exports = {
    entry: {
        page1: './src/js/page1/index.js',
        page2: './src/js/page2/index.js',
        page3: './src/js/page3/index.js',
    },
    output: {
        path: './assets/javascripts',
        publicPath: '/assets/',
        filename: '[name].js'
    }
}

所以每次我创建一个新页面时,我都必须在我的条目对象中添加另一行。这可能会变得非常大而且非常混乱。

那么有没有办法让 webpack 循环遍历 /src/js/ 文件夹中的所有文件夹并自动将相应文件夹中的 index.js 设为入口点?

4

2 回答 2

10

使用glob 包

const glob = require("glob");

const entry = glob.sync("src/js/**/*.js")
    .reduce((x, y) => Object.assign(x, {
        [y]: y,
    }), {});

module.exports = {
    entry,
    output: {
        path: './assets/javascripts',
        publicPath: '/assets/',
        filename: '[name].js'
    }
}

这会遍历您的整个文件夹结构并抓取每个 js 文件并将其添加到条目哈希中

于 2017-04-25T09:49:27.967 回答
1

添加到我上面的答案,因为我无法发表评论。使用该path.basename方法将为您提供干净、非嵌套的文件名。

const glob = require("glob")
const path = require("path")

const entry = glob
    .sync("src/js/**/*.js")
    .reduce((acc, curr) => {
        return {...acc, [path.basename(curr, ".js")]: curr}
    })

module.exports = {
    entry,
    output: {
        path: './assets/javascripts',
        publicPath: '/assets/',
        filename: '[name].js'
    }
}

于 2019-01-09T18:48:56.003 回答