2017-05-31 1 views
1

Dans mes projets impliquant Elixir, j'ai souvent des choses que je veux ajouter à mon fichier mix.exs par exemple en ajoutant mes propres ENV etc Il est généralement difficile d'ajouter ces éléments et de les ajouter à mes .gitignore. Ma question est, est-il possible d'avoir quelque chose comme custom_mix.exs que je peux appeler de mix où je peux mettre dans tous mes paramètres personnalisés qui écrasera les paramètres qui sont définis dans mix.exs? Le fichier custom_mix.exs ne sera pas mis sous git et peut être mis en permanence sous .gitignore et mix.exs ne fera pas d'erreur si aucun custom_mix.exs n'est trouvé.Est-il possible d'avoir un fichier de mélange personnalisé pour Elixir?

Répondre

1

Oui, très facile à faire. Ajouter ce qui suit au sommet de votre fichier mix.exs

if File.exists?("./custom_mix.exs"), do: Code.require_file("./custom_mix.exs", __DIR__) 

defmodule MyApp.Mixfile do 
    # ... 
    if function_exported?(CustomMix, :some_stuff, 0), 
    do: CustomMix.some_stuff() 
end 

Ensuite, créez votre custom_mix.exs fichier comme ceci:

defmodule CustomMix do 
    def some_stuff do 
    # 
    end 
end 
+0

Cela ne provoquera pas de 'mix' à bombarder si' custom_mix.exs' n'est pas trouvé correctement? –

+0

a mis à jour ma réponse –

4

Alors que la réponse par Steve Pallen est tout à fait correct, vous êtes en train de faire c'est faux en premier lieu. Cela ressemble vraiment à un X/Y problem.

Pourquoi mettriez-vous paramètres dans le fichier mix.exs, alors que vous avez config/config.exs à cet effet particulier? config.exs a un support intégré pour ce que vous cherchez hors de la boîte, vérifiez comment. fait différentes configurations pour différents environnements.

mix.exs Le fichier est destiné à spécifier le comportement général de l'application et ce que vous essayez d'obtenir est que le comportement de l'application soit indéterminé.


Le problème possible, vous pouvez essayer de résoudre cette façon, que je pouvais penser, est de versionnage applications dépendantes ou de faire une mosaïque sur le code mix.exs externe. Pourtant, l'approche pour s'attaquer et se battre contre le fichier de projet de l'élixir de base est une mauvaise idée. Vous pouvez créer un wrapper pour le fichier original mix.exs, en appelant ses fonctions à partir de votre version et en forçant Elixir à utiliser votre version avec certains wrappers de shell, ou similaire.

+0

Est-il possible de réaliser un ensemble séparé d'exigences dites quelque chose comme des dépendances pour les projets mais je veux seulement les avoir pour ma propre config dire ': lowks' ->' {: bypass, "~> 0.6", seulement: [: lowks,: test,: wercker]} '? –

+0

Tout est possible. Maintenant, je suis sûr que c'est un problème X/Y. Si la dépendance est _a dependency_, vous ne pouvez pas la jeter pour vos utilisateurs. Si c'est le vôtre, private etc, alors oui (l'option 'only:' est là pour spécifier _environments_.) Vous êtes les bienvenus, faites ce qui précède et exécutez 'MIX_ENV = lowks iex -S mix'. – mudasobwa

+0

suis d'accord avec @mudasobwa Je ne comprends toujours pas pourquoi tu voudrais faire ça. La seule chose que je ferai dans mix.exs si je bascule une dépendance entre le chemin local et hex/github quand je travaille sur la dépendance. Ensuite, je viens de commenter les lignes de deux lignes et de supprimer la version du chemin local lorsque je publie. –