我尝试将sequelize和sqlite3与电子一起使用,我在使用webpack时遇到了问题。 要测试我的描述中提供的项目,请在
之前执行npm install
示例1 :我尝试了两个没有webpack的项目,它运行良好:sqlite3正确加载并在数据库中写入数据。 https://www.dropbox.com/sh/yag6690rnc5l9y0/AAA0WeKvnHxhxY4qtxhHONWma?dl=0
npm start will launch node_modules/.bin/electron .
它启动使用index.js文件的index.html:
示例2: 我使用webpack编译项目,因为我使用的是ES6语法(在提供的示例中,语法不是ES6,它只是为了重用同一个文件如例1)。 https://www.dropbox.com/sh/g38305knvrpdala/AAANbVBXlc-scBrzdCQTqqI7a?dl=0
npm start
将编译index.js入口点并输出index.html用于电子应用程序的bundle.js文件。
当我启动第二个示例时,index.html加载了使用 webpack 编译的 bundle.js 文件,我的错误如下:
要查看ERRRRR issss,
与提供的链接不同,不提供使用带电子的webpack。链接是我的示例1项目对我来说,一切都在第一次尝试完美,没有做更多的事情。但我尝试了为我的webpack示例2提供的每个解决方案,但没有任何作用。
我不明白为什么,在基本的例子中,只是直接在html中包含index.js文件它运行良好,但是当由webpack处理并且包含在同一个html中时它不起作用?我错过了什么吗?
如果没有使用webpack编译,一切正常吗? WebPack让我编写ES6并将所有内容拆分成一个包但如果我手动重写所有文件并只使用一个文件就可以工作......所以从我的观点来看,这里更像是webpack的行为/配置问题。
答案 0 :(得分:7)
我终于找到了解决方案,问题是像sqlite这样的node_modules文件夹被捆绑在bundle.js中。
下面的链接提供了很好的解释,并解释了使用webpack后端的配置,并防止在使用require指令时捆绑node_modules。
http://jlongster.com/Backend-Apps-with-Webpack--Part-I
解决我问题的代码是:
var nodeModules = {};
fs.readdirSync('node_modules')
.filter(function(x) {
return ['.bin'].indexOf(x) === -1;
})
.forEach(function(mod) {
nodeModules[mod] = 'commonjs ' + mod;
});
然后我将nodeModules添加到webpack的外部配置
module.exports = {
module: {
.....
externals: [nodeModules]
};
如果我设置externals : ["sequelize"]