2011-07-26 66 views
6

我需要使用NAnt更新.js文件中的特定行。 該生產線將是這樣的:如何使用NAnt更改文件中的一行?

global.ServerPath = 'http://server-path/'; 

我需要一種方法來更新與目標服務器的該行的「服務器路徑」的一部分。
ReplaceString不好,因爲當我更新它時,我不知道文件中的路徑是什麼。

任何幫助?

在此先感謝

+0

你有沒有考慮是否「硬」編碼服務器的路徑到一個js文件是最好的解決辦法(無論它解決什麼問題)?從客戶端JavaScript中的整個URL獲取值,或從服務器端頁面(基於實際主機頭)發出一小段內聯js可能是一些替代方案。 –

+0

是的,這是不幸的。我們將應用程序作爲第三方應用程序中的插件進行託管,第三方系統需要JS中的這一行才能找到我們。 – Nellius

+0

如果'string :: replace'不起作用''可以完成這項工作。我需要解決這個問題。敬請期待... –

回答

12

如果string::replace不起作用<regex>可以做的工作。這是它:

<?xml version="1.0" encoding="utf-8" ?> 
<project name="replace.line" default="replace"> 
    <target name="replace" descripton="replaces a line"> 
    <property 
     name="js.file" 
     value="C:\foo.js" /> 
    <loadfile file="${js.file}" property="js.file.content" /> 
    <regex 
     input="${js.file.content}" 
     pattern="(?'BEFORE'.*)global\.ServerPath\s*=\s*'[^']*';(?'AFTER'.*)" /> 
    <echo 
     file="${js.file}" 
     message="${BEFORE}global.ServerPath = 'http://bla/';${AFTER}" 
     append="false" /> 
    </target> 
</project> 
+2

我和Aedna有同樣的問題。使用'(?'BEFORE'[\ w \ s \ W] *)'而不是'(?'BEFORE'。*)'(和AFTER匹配組類似)爲我工作。我想知道這是否是一種編碼方式。 – Gerbus

+0

應用@Gerbus的更新代碼 – Zymotik

1

也可以使用copy task與filterchain和replacetokens filter一起。

下面是一個例子:

  <token key="WebConfig.EnvironmentName" value="${env_webconfig_EnvironmentName}" /> 
      <token key="WebConfig.SMTPServerName" value="${env_webconfig_SMTPServerName}" /> 
      <token key="WebConfig.DatabaseConnectionString" value="${env_drmportal_webconfig_DatabaseConnectionString}" /> 

     </replacetokens> 
    </filterchain> 
</copy> 

我保留在/配置/文件夾中的所有我的模板文件(例如web.config.template)和我使用的複製任務會在複製到相同的/ config /文件夾但不帶「.template」文件擴展名時替換值。然後我做了以後需要的... \

我會承認它有點繁瑣的使用屬性的方式,你必須爲此,但你有靈活性,你可以加載不同的屬性集環境中的價值(例如本地,舞臺,製作等),但這比我想的要多一點。

4

不應該是[\ w \ s \ W] *而不是。*在AFTER和BEFORE之前能夠捕獲所有行?

在我的情況。*是僅捕獲線,而[\ W \ S \ W] *工作了整個文件

相關問題