我有一个文件,我想要同时拥有Node.js和浏览器代码。
Node.js代码不应该在浏览器中可见。
webpack可以根据环境从文件中排除代码吗?
有点像C预处理指令。 #if #else, etc
。
我知道Webpack会密集地解析代码,这让我觉得它可以。
约束
Node.js代码无法进入浏览器,因为它可能包含敏感的配置选项。
我希望浏览器和节点代码在同一个文件中。我知道我可以使用webpack.IgnorePlugin
在文件的基础上忽略需求,或者将共享代码放在浏览器文件中并要求从服务器(我现在正在做),但我想知道它是否是可以将代码并排放在同一个文件中。
编辑:以下是我正在尝试做的一个例子。
export class FooPlugin {
$name = 'foo-plugin'
register(app) {
const app = koa()
app.get('/foo', () => { this.send('foo') })
app.set('SECRET STUFF!')
app.start()
this.shared()
}
shared(app) {
// browser things - isomorphic react router routes, etc.
}
registerBrowser(app) {
this.shared()
}
}
// This is called in another file depending on the environment.
if (!isBrowser) {
(new FooPlugin).register(app)
} else {
(new FooPlugin).registerBrowser(app)
}
答案 0 :(得分:1)
您可以使用Define Plugin设置NODE_ENV
并以此方式为您的代码提供支持:
var define = new webpack.DefinePlugin({'process.env': {NODE_ENV: JSON.stringify('production')}})
DefinePlugin
将使用提供的字符串替换代码中process.env.NODE_ENV
的实例,因此在编译的代码中最终会出现if ('production' !== 'production')
之类的内容。当你进行生产构建时,Webpack运行uglify
并使用死代码消除,这将消除这些无法访问的块。 (见webpack howto: feature flags)
这就是React(和许多其他库)在开始生产之前剥离开发代码的方式。