Javascript 网页包条件要求

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'); } 我知道,你可以提供一个网页。 但我不

我正在用webpack编写一个同构键值存储

这是我目前加载库的方法,这显然不起作用,因为webpack希望同时解决
需要
。
正确的方法是什么

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'){}
,这不应该是
吗?更新的链接: