如何使用背包管理静态资产
我使用backpack与express server.I发现一些后端代码有fs.readFile(路径),这些文件位于src / assets / *中,不包括构建路径。例如我使用sequelize并需要读取一些文件。
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;
});
我想知道如何管理这些文件,因为它们会丢失文件丢失的错误。我接下来有一些想法
- 使用FileLoader或URL-Loader或其他配置集webpack
- 事先在构建目录中找到资产。
- 用户导入jsfiles而不是fs.readFile
- 停止使用背包。
我需要动态读取js文件,因此第一个解决方案需要一些刺激性的扩展修改。其次我们可能不再需要背包,所以我们有更好的选择第4。第三个是合理的,但有些代码需要重写,如果有很多文件,那么检查它们并不容易。
你有更好的解决方案吗?
回答如下:我解决了使用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