我需要使用NAnt更新.js文件中的特定行。 該生產線將是這樣的:如何使用NAnt更改文件中的一行?
global.ServerPath = 'http://server-path/';
我需要一種方法來更新與目標服務器的該行的「服務器路徑」的一部分。
ReplaceString不好,因爲當我更新它時,我不知道文件中的路徑是什麼。
任何幫助?
在此先感謝
我需要使用NAnt更新.js文件中的特定行。 該生產線將是這樣的:如何使用NAnt更改文件中的一行?
global.ServerPath = 'http://server-path/';
我需要一種方法來更新與目標服務器的該行的「服務器路徑」的一部分。
ReplaceString不好,因爲當我更新它時,我不知道文件中的路徑是什麼。
任何幫助?
在此先感謝
如果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>
也可以使用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」文件擴展名時替換值。然後我做了以後需要的... \
我會承認它是有點繁瑣的使用屬性的方式,你必須爲此,但你有靈活性,你可以加載不同的屬性集環境中的價值(例如本地,舞臺,製作等),但這比我想的要多一點。
不應該是[\ w \ s \ W] *而不是。*在AFTER和BEFORE之前能夠捕獲所有行?
在我的情況。*是僅捕獲線,而[\ W \ S \ W] *工作了整個文件
你有沒有考慮是否「硬」編碼服務器的路徑到一個js文件是最好的解決辦法(無論它解決什麼問題)?從客戶端JavaScript中的整個URL獲取值,或從服務器端頁面(基於實際主機頭)發出一小段內聯js可能是一些替代方案。 –
是的,這是不幸的。我們將應用程序作爲第三方應用程序中的插件進行託管,第三方系統需要JS中的這一行才能找到我們。 – Nellius
如果'string :: replace'不起作用''可以完成這項工作。我需要解決這個問題。敬請期待... –