Javascript 网页包条件要求
我正在用webpack编写一个同构键值存储 这是我目前加载库的方法,这显然不起作用,因为webpack希望同时解决Javascript 网页包条件要求,javascript,webpack,leveldb,isomorphic-javascript,Javascript,Webpack,Leveldb,Isomorphic Javascript,我正在用webpack编写一个同构键值存储 这是我目前加载库的方法,这显然不起作用,因为webpack希望同时解决需要。 正确的方法是什么 var db = null; if (typeof window === 'undefined') { // node context db = require('level'); } else { // browser context db = require('gazel'); } 我知道,你可以提供一个网页。 但我不
需要。
正确的方法是什么
var db = null;
if (typeof window === 'undefined') {
// node context
db = require('level');
} else {
// browser context
db = require('gazel');
}
我知道,你可以提供一个网页。
但我不知道如何使用它
谢谢 我想这对你有用。您可以将db
模块设置为指向级别
或gazel
,具体取决于您正在创建的版本。webpack.config.js
module.exports = {
plugins: [
new webpack.DefinePlugin({
"process.env": {
BROWSER: JSON.stringify(true)
}
})
]}
your-universal.js
var db = null;
if (!process.env.BROWSER) {
// node context
db = require('level');
} else {
// browser context
db = require('gazel');
}
看看这篇关于基于环境的有条件构建的文章。谢谢,这确实奏效了:)我在webpack中设置了一个浏览器插件,现在我在浏览器构建中使用普通的NodeJ(node file.js)和webpack只是一个小问题,但为什么这么多人都有这个JSON.stringify(true)垃圾?这在字面上(字面上)相当于“true”…@JasonBoyd我想知道,我自己,我认为这是一种让人们注意的方式,因为对于字符串值,人们很容易误解在“process.env.NODE_env':“production”
中需要额外的引号。它们可能会错误地删除它们,特别是在“true”
的情况下。额外的引号是必需的,因为值字符串直接插入源代码中以代替引用。将DefinePlugin配置为替换“process.env.NODE_env”:“production”
,则代码if(process.env.NODE_env==“production”){…}
变为if(“production”=“production”){…}
。如果没有额外的引号,它将变成if(production==“production”){…}
,它使用了一个未声明的变量。请小心使用这种方法,因为如果,例如,如果“level”是一个纯nodeJS(server)模块,webpack将无法编译您的代码。最好使用“stub”的第一个答案来回答任何纯服务器端需要的模块。如果(process.env.BROWSER==='true'){}
,这不应该是吗?更新的链接: