如何使用背包管理静态资产

时间:2017-12-20 05:32:29

标签: node.js webpack

我使用backpack表达服务器。我发现一些后端代码有fs.readFile(路径),这些文件位于src / assets / *中,不包含构建路径。例如我使用sequelize和need阅读一些文件。

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    var model = sequelize['import'](path.join(__dirname, file));
    db[model.name] = model;
  });

我想知道应该如何管理这些文件,因为它们会丢失文件丢失错误。我有一些想法

  1. 使用FileLoader或URL-Loader或其他配置集webpack
  2. 提前在构建目录中找到资产。
  3. 用户导入jsfiles而不是fs.readFile
  4. 停止使用背包。
  5. 我需要动态读取js文件,因此第一个解决方案需要一些刺激性的扩展修改。 其次我们可能不再需要背包,所以我们有更好的选择第4。 第三个是合理的,但有些代码需要重写,如果有很多文件,那么检查它们并不容易。

    你有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我解决了使用require.context在编译过程中处理动态需求模块的问题。

 var context   = require.context(__dirname ,false,/\.\/(?!index).*\.js$/)  
 context.keys().forEach(
  (file) => {
    if (!sequelize.importCache[file]) {
      let modelDefine = context(file)
      if (typeof modelDefine === 'object') {
        // ES6 module compatibility
        modelDefine = modelDefine.default
      }
      var model = modelDefine(sequelize, Sequelize.DataTypes)
      sequelize.importCache[file] = model
      db[model.name] = model
    }
  }
)

这不需要定位资产,因为这些模块捆绑了构建的文件。

请参阅enter link description here