Razzle: 覆盖 razzle.config.js 中的 paths.js 值

创建于 2018-07-28  ·  12评论  ·  资料来源: jaredpalmer/razzle

我想将我的服务器目录移动到根目录中,这样我的文件系统就会像这样。

-/src
-服务器
-...等等。

在 razzle 中挖掘,似乎 babel 和 webpack 正在从

module.exports = {
  dotenv: resolveApp('.env'),
  appPath: resolveApp('.'),
  appBuild: resolveApp('build'),
  appBuildPublic: resolveApp('build/public'),
  appManifest: resolveApp('build/assets.json'),
  appPublic: resolveApp('public'),
  appNodeModules: resolveApp('node_modules'),
  appSrc: resolveApp('src'),
  appPackageJson: resolveApp('package.json'),
  appServerIndexJs: resolveApp('src'),
  appClientIndexJs: resolveApp('src/client'),
  testsSetup: resolveApp('src/setupTests.js'),
  appBabelRc: resolveApp('.babelrc'),
  appEslintRc: resolveApp('.eslintrc'),
  appRazzleConfig: resolveApp('razzle.config.js'),
  nodePaths: nodePaths,
  ownPath: resolveOwn('.'),
  ownNodeModules: resolveOwn('node_modules'),
  publicUrl: getPublicUrl(resolveApp('package.json')),
  servedPath: getServedPath(resolveApp('package.json')),
};

唯一的问题是,因为这些值是硬编码的,我无法覆盖它们。

我想出了一个解决方法,将resolveApp 函数从razzle 复制粘贴到razle.config.js

const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);

并循环遍历规则并根据环境和配置,我将包含属性替换为我的自定义路径,就像这样......

      appConfig.module.rules.map(rule => {
        if (rule.include && rule.test) {
          rule.include = [
            resolveApp('server'),
            resolveApp('src'),
          ];
        }
      })

虽然这感觉真的很hacky。 是否可以将 paths.js 中的硬编码值抽象为环境变量或在 createConfig 函数中公开它们,以便我可以随时更改路径?

如果这看起来是个好主意,我很乐意为此工作,但也许我已经缺少了解决方案。 请帮忙 :)

enhancement

最有用的评论

在我的雷达上,有一个计划 😀

所有12条评论

你好! 所以这就是开源和我的日常工作和生活之间的交易,我有很多事情要管理,所以我使用 GitHub 机器人在这里和那里自动化一些事情。 这个特定的 GitHub bot 会将其标记为过时,因为它有一段时间没有最近的活动。 如果几天内没有进一步的活动,它将被关闭。 不要把这当回事——说真的——这是一个完全自动化的动作。 如果这是一个错误,请发表评论,DM 我,发送载体 pidgeon 或烟雾信号。

好。 我将我的服务器移动到 src 内的新服务器文件夹
然后在 razzle.config.js 中编辑服务器的配置

config.entry.pop()
config.entry.push('./src/server')

它工作正常,但似乎在此调试(--inspect)nodejs 损坏后

你好! 所以这就是开源和我的日常工作和生活之间的交易,我有很多事情要管理,所以我使用 GitHub 机器人在这里和那里自动化一些事情。 这个特定的 GitHub bot 会将其标记为过时,因为它有一段时间没有最近的活动。 如果几天内没有进一步的活动,它将被关闭。 不要把这当回事——说真的——这是一个完全自动化的动作。 如果这是一个错误,请发表评论,DM 我,发送载体 pidgeon 或烟雾信号。

由于不活动,ProBot 自动关闭了它。 如果这是一个错误,请大喊大叫,我们将重新打开它。

这个问题不应该被关闭。

我还使用变通方法来设置不同的应用程序目录,这是一个非常大的项目,在同一根目录中托管 API 代码,而“src”确实不明确。

@nvma你能提供一个例子来设置不同的应用程序目录吗? 谢谢!

我认为这是一个非常重要的问题。 如果我们能提出应该可配置的 _core_ 目录列表,我愿意尽快提交 PR。 蝙蝠,我会说: buildsrc客户端, src服务器和public

我能够在我的 razzle / webpack 配置中解决它。

在我的雷达上,有一个计划 😀

如果它对其他人有用,我最近不得不在razzle.config.js执行此操作,并且它似乎有效

const defaultOptions = {
  server: null,
  client: null,
};

function modifyEntryPoints(baseConfig, env, webpack, userOptions = {}) {
  const options = { ...defaultOptions, ...userOptions };
  const webpackConfig = { ...baseConfig };

  const { client, server } = options;
  /* This is required to rename the entry points instead of using the defaults */
  if (env.target === "node" && server) {
    webpackConfig.entry = [server];
  }
  if (env.target !== "node" && client) {
    webpackConfig.entry.client = client;
  }

  return webpackConfig;
}


module.exports = {
  plugins: [
    {
      func: modifyEntryPoints,
      options: {
        server: path.join(__dirname, "./src/docker-server"),
        client: path.join(__dirname, "./src/docker-client"),
      },
    },
  ]
};

在开发中修复

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

howardya picture howardya  ·  5评论

alexjoyner picture alexjoyner  ·  3评论

knipferrc picture knipferrc  ·  5评论

Jayphen picture Jayphen  ·  4评论

GouthamKD picture GouthamKD  ·  3评论