Razzle: razzle.config.jsのpaths.js値をオーバーライドします

作成日 2018年07月28日  ·  12コメント  ·  ソース: jaredpalmer/razzle

サーバーディレクトリをルートに移動して、ファイルシステムが次のようになるようにします。

-/ src
-サーバ
-...NS。

ラズルを掘り下げて、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);

ルールをループし、環境と構成に応じて、次のようにincludeプロパティをカスタムパスに置き換えます...

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

しかし、これは本当にハッキーな感じがします。 path.jsのハードコードされた値を環境変数に抽象化するか、createConfig関数で公開して、いつでもパスを変更できるようにすることは可能でしょうか?

それが良い考えのように思えるなら、私はこれに取り組んでうれしいです、しかし多分私が逃しているこれに対する解決策がすでにあるかもしれません。 助けてください :)

enhancement

最も参考になるコメント

私のレーダーでは、ある種の計画を立ててください😀

全てのコメント12件

ホラ! これがオープンソースと私の日常の仕事と生活の間の取り決めです。管理することがたくさんあるので、GitHubボットを使用してあちこちでいくつかのことを自動化します。 この特定のGitHubボットは、最近のアクティビティがしばらくないため、これを古いものとしてマークします。 数日以内にそれ以上の活動が発生しない場合、それは閉鎖されます。 これを個人的に(真剣に)行わないでください。これは完全に自動化されたアクションです。 これが間違いである場合は、コメントを入力するか、DMを送信するか、キャリアピジョンを送信するか、発煙信号を送信してください。

良い。 サーバーをsrc内の新しいサーバーフォルダーに移動しました
そして、razzle.config.jsでサーバーの設定を編集します

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

正常に動作しますが、このデバッグ(--inspect)後のnodejsが壊れているようです

ホラ! これがオープンソースと私の日常の仕事と生活の間の取り決めです。管理することがたくさんあるので、GitHubボットを使用してあちこちでいくつかのことを自動化します。 この特定のGitHubボットは、最近のアクティビティがしばらくないため、これを古いものとしてマークします。 数日以内にそれ以上の活動が発生しない場合、それは閉鎖されます。 これを個人的に(真剣に)行わないでください。これは完全に自動化されたアクションです。 これが間違いである場合は、コメントを入力するか、DMを送信するか、キャリアピジョンを送信するか、発煙信号を送信してください。

非アクティブのため、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 評価

関連する問題

gabimor picture gabimor  ·  3コメント

sebmor picture sebmor  ·  4コメント

krazyjakee picture krazyjakee  ·  3コメント

kkarkos picture kkarkos  ·  3コメント

panbanda picture panbanda  ·  5コメント