2

我有一个文件,我想要同时拥有 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)
}
4

1 回答 1

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:特性标志

这就是 React(和许多其他库)在投入生产之前剥离开发代码的方式。

于 2015-07-30T13:25:07.780 回答