首页 > 解决方案 > 无法在 Webpack 中输出动态 SCSS 入口点

问题描述

我正在使用 Webpack 4,我正在尝试查看一个文件夹以查找所有 scss 文件并为找到的每个文件动态创建一个入口点。当我看到函数正在返回时,它似乎正在返回我需要的内容,但没有从函数输出 css 文件,只有第一个入口点备用:

我使用的示例来自https://www.sitepoint.com/community/t/how-to-configure-webpack-to-output-multiple-css-files-from-sass/303659/2

我不明白我做错了什么。谢谢你提供的所有帮助。

const departmentStyles = pattern => glob
  .sync(pattern)
  .reduce((entries, filename) => {
    const [, name] = filename.match(/([^/]+)\.scss$/)
    return { ...entries, [name]: filename }
  }, {})

console.log('Departments', departmentStyles('./src/scss/alternate/departments/*.scss'))

When I log out the return value of department style I receive:
/*
Departments { alt1: './src/scss/alternate/departments/alt1.scss',
  alt2: './src/scss/alternate/departments/alt2.scss',
  alt: './src/scss/alternate/departments/alt3.scss', }
*/


module.exports = {
  entry: {
    ...departmentStyles('./scss/alternate/departments/*.scss'),
  },

  output: {
    path: path.join(__dist, 'alternate'),
    filename: 'js/[name].js',
    chunkFilename: 'js/[name].chunk.js',
  },

  plugins: [
    new MiniCssExtractPlugin({
      filename: 'css/[name].css',
      chunkFilename: 'css/[name].css'
   })
  ]
}

标签: webpackwebpack-4

解决方案


经过多次反复试验,我找到了解决方案。我首先修改了检索文件的方式,然后将对象添加到 webpack 入口点

const entryObject = {}
// For each file in the glob
departments.forEach(file => {
  // Will return just the file name without extension
  const name = file.match(/(?<=\/departments\/)(.*)(?=.*\.scss)/g)
  // Replace ./src with ./ so the path will resolve on build
  file = file.replace('./src/', './')
  // Build the entry object
  entryObject[name] = file
})

// 上面创建了一个入口对象:name: 'filepath/file.css'

然后在我的入口点,我只需添加 entryObject

module.exports = {
  entry: {
    tri: './js/tri.js',
    entryObject
  }

  /* Rest of the webpack stuff */
}

推荐阅读